当前位置: 首页 > 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.lryc.cn/news/612265.html

相关文章:

  • STM32学习记录--Day8
  • 键帽(dp)
  • 【数字图像处理系列笔记】Ch03:图像的变换
  • Redis Redis 常见数据类型
  • 高等数学(工本)----00023 速记宝典
  • JAVA高级编程第八章
  • windows系统创建ubuntu系统
  • Python与自动化运维:构建智能IT基础设施的终极方案
  • 第七章课后综合练习
  • 学习日志29 python
  • 达梦数据库数据守护集群启动与关闭标准流程
  • 对接钉钉审批过程记录(C#版本)
  • 什么是逻辑外键?我们要怎么实现逻辑外键?
  • IDEA 2025下载安装教程【超详细】保姆级图文教程(附安装包)
  • 2 SpringBoot项目对接单点登录说明
  • 【0基础PS】PS工具详解--直接选择工具
  • capset系统调用及示例
  • 数据安全防护所需要的关键要素
  • 数据结构学习(days04)
  • 嵌入式C语言连连看小游戏开发实现详解
  • Java 大视界 -- 基于 Java 的大数据实时流处理在工业物联网设备故障预测与智能运维中的应用(384)
  • 93、【OS】【Nuttx】【构建】cmake menuconfig 目标
  • linux 使用docker时开放的端口不受防火墙控制的解决方案
  • 无监督学习之K-means算法
  • 第一性原理科学计算服务器如何选择配置-CPU选择篇
  • ADM2587EBRWZ-REEL7_ADI亚德诺_隔离RS-485收发器_集成电路IC
  • 点赞服务完整消息流转过程详解(原方案,未使用Redis)
  • 数据仓库命名规范
  • TypeScript 数组类型精简知识点
  • 【后端】java 抽象类和接口的介绍和区别