当前位置: 首页 > news >正文

数据结构---二级指针(应用场景)、内核链表、栈(系统栈、实现方式)、队列(实现方式、应用)

一、二级指针的应用场景

     1、在被调函数中,想要修改主调函数中的指针变量,需要传递该指针变量的地址,形参用二级指针接收。

     2、指针数组的数组名是一个二级指针,指针数组的数组名作为参数传递时,可用二级指针接收。

                指针数组:保存多个指针的数组。 eg:char *a[10]

                数组名:数组首元素的地址。

二、内核链表

     内核链表是一个没有数据域的双向循环链表。不再将数据存储在链表结点中,而是将结点嵌入到存储的数据中。其结构示意图如下:

     包含两个宏定义:

        1、offset_of: 获取内核链表中链表结点到结构体起始位置的偏移量。

        2、container_of: 通过偏移量获取结构体的首地址(结构体首地址 = 结点首地址 - 偏移量)。

三、栈

     1、系统栈:

     2、内存中栈区存储的数据类型

        1)局部变量

        2)函数的形参、函数的返回值

        3)函数的调用关系

     3、数据结构中的栈

        1)栈结构:只允许从一端进行数据的插入和删除的线形存储结构,称之为栈结构。

        2)特点:先进后出(FILO)

     4、实现方法

        1)顺序表(数组)---顺序栈

                顺序栈的四种栈的结构:满增栈、满减栈、空增栈、空减栈。

           (1)满栈、空栈:按栈顶所在的位置是否存在数据来区分。满栈:先移动栈顶位置,后存入数据(栈顶始终有数据);空栈:先在栈顶存入数据,后移动栈顶位置(栈顶无数据)。

           (2)增栈、减栈:按照栈的生长方向区分。增栈:入栈时,栈顶从内存低地址向内存高地址移动;减栈:入栈时,栈顶从内存高地址向内存低地址移动。

     2)链式结构---链式栈

          (1)栈对象:

         (2)应用

        A. 链式栈函数的封装

                a. 链式栈---创建链式栈函数的封装

                b. 链式栈---判断是否为空函数的封装

                c. 链式栈---遍历函数的封装

                d. 链式栈---入栈(插入数据)函数的封装

                e. 链式栈---出栈(删除数据)函数的封装

                f. 链式栈---获取栈顶元素函数的封装

                g. 链式栈---销毁函数的封装

上述函数封装时所需的头文件

        B. 声明部分(头文件)

        C. 在主函数中的书写格式

四、队列

     1、概念

        允许从一端进行数据插入,另一端进行数据删除的线形存储结构,称为队列结构。

        插入操作:叫入队操作,插入的这端称为队列的队尾;

        删除操作:叫出队操作,删除的这端称为队列的队头。

        特点:先进先出(FTFO)

        应用:数据缓存

     2、实现方式

        1)顺序表---顺序队列

        顺序队列对象:

        顺序队列的尾指针(tail):先存数据、后移到下一结点,尾指针始终没有数据。

        在顺序队列中,边存边删会出现假溢出问题(尾指针的下一项为空,没有指向应该指向的首地址),将删除数据空出来的内存没有使用起来(可以用循环队列来解决)。

        循环队列:用来实现头指针从最后指向最前的操作。可以解决假溢出问题,但为了区分队空与队满,将来少存储一个数据。

        循环队列的判空:队头和队尾处于同一位置,此时任务队列为空。

        循环队列的判满:当 队尾+1 跟上队头时,认为此时队列未满。

        循环队列的实现:(head + 1)% len

                                     (tail + 1)% len

        元素范围:[head , tail )

     2)链式表---链式队列 

       (1) 链式队列对象

        (2)应用
        A. 链式队列函数的封装

                a. 链式队列---创建队列函数的封装

                b. 链式队列---判断是否为空函数的封装

                c. 链式队列---入队(插入数据)函数的封装

                d. 链式队列---出队(删除数据)函数的封装

                e. 链式队列---获取队头元素函数的封装

                f. 链式队列---销毁函数的封装

                g. 链式队列---遍历函数的封装

以上函数需要包含的头文件

        B. 声明部分

        C. 主函数书写格式

【END】

http://www.dtcms.com/a/317989.html

相关文章:

  • SQL168 统计作答次数
  • 简单介绍cgroups以及在K8s中的应用
  • DM数据库的安全版本SYSDBA无法修改其他用户密码?
  • 2025年COR SCI2区,船载AUV协同调度优化+海上风电机组水下检测,深度解析+性能实测
  • GPT-oss开源:200万小时淬炼AI Agent专属商用引擎
  • Vi与Vim的主要区别总结
  • Linux systemd 服务管理与 Firewall 防火墙配置
  • 【论文分析】【Agent】SEW: Self-Evolving Agentic Workflows for Automated Code Generatio
  • 从零开始的云计算生活——第三十八天,避坑落井,Docker容器模块
  • 《RedisTemplate 核心操作全解析》
  • 家庭宽带中的服务器如何被外网访问?
  • 无法解析 CentOS 官方镜像源的域名
  • 977.有序数组的平方
  • 什么是回调地址
  • 8、项目管理
  • PI 思维升级 解密电容器的选择与布局策略,带您追求极致平坦的电源阻抗
  • 个人自然人可不可以申请注册商标!
  • 2025国赛数学建模C题详细思路模型代码获取,备战国赛算法解析——决策树
  • Python Day24 多线程编程:核心机制、同步方法与实践案例
  • Lesson 33 Out of the darkness
  • 开疆智能ModbusTCP转Profinet网关连接EPSON机器人配置案例
  • c# winform 调用 海康威视工业相机(又全又细又简洁)
  • 字典树trie
  • 技术博客:从HTML提取到PDF生成的完整解决方案
  • 奔图P2500NW打印机手机无线连接方法
  • 强化应急通信生命线:遨游三防平板、卫星电话破局极端灾害救援
  • 2.6 sync
  • 2024年测绘程序设计比赛--空间探索性分析(数据为2025年第三次模拟数据)
  • 第二十六天(数据结构:树(补充版程序请看下一篇))
  • 【数据结构与算法】刷题篇——环形链表的约瑟夫问题