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

一、二级指针的应用场景

     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.pswp.cn/pingmian/92062.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/92062.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NodeJs学习日志(1):windows安装使用node.js 安装express,suquelize,sqlite,nodemon

windows安装使用node.js 安装express,suquelize,sqlite 系统是win10,默认已经安装好nodejs与npm包名作用expressWeb应用框架suquelize数据库ORMsqlite数据库nodemon代码热重载安装express 添加express生成器 npm add express-generator4安装e…

Cervantes:面向渗透测试人员和红队的开源协作平台

Cervantes 是一个专为渗透测试人员和红队打造的开源协作平台。它提供了一个集中式工作区,用于集中管理项目、客户端、漏洞和报告。通过简化数据组织和团队协调,它有助于减少规划和执行渗透测试所需的时间和复杂性。 作为 OWASP 旗下的开源解决方案&…

[Python 基础课程]猜数字游戏

使用 Python 实现一个猜数字游戏,先随机生成一个 1 到 100 之间的一个随机整数,让用户猜测这个数是什么,每次都提示用户猜大了还是猜小了,如果用户猜对了,提示用户猜对了,用了多少次,并且之前每…

文件加密实现

一、不依赖外部库实现 使用自定义的XOR加密算法结合简单的密钥扩展。 实现说明 这个方案不依赖任何外部库,仅使用C标准库实现: 加密原理:采用XOR加密算法,这是一种简单但有效的对称加密方式,相同的密钥可以用于加密和解…

Unity轻量观察相机

一、脚本功能简介ObserveCamera 是一个可直接挂载到任意 GameObject 上的通用摄像机控制脚本,支持以下功能:鼠标右键控制摄像机绕自身旋转(俯仰、水平)鼠标左键拖拽目标对象进行平移(局部 XY 平面移动)鼠标…

1深度学习Pytorch-pytorch、tensor的创建、属性、设备和类型转换、数据转换、常见操作(获取元素、元素运算、形状改变、相乘、广播)

文章目录PyTorchTensor1 Tensor 的创建1.torch.tensor2.torch.Tensor3. 线性张量4. 随机张量5. 特定数值的张量2 Tensor 常见属性1 属性2 设备切换3 类型转换torch.Tensor.to(dtype)类型专用方法创建张量时直接指定类型与 NumPy 数组的类型互转4 数据转换(浅拷贝与深…

五、Istio管理网格外部服务

因语雀与csdn markdown 格式有区别,请查看原文: https://www.yuque.com/dycloud/pss8ys 一、Egress Listener 流量策略 前面学习了 sidecar 自动注入原理、inbound Listener、outbound Listener 等概念,也知道了 EgressListener 的流量策略…

Ubuntu20.04 离线安装 FFmpeg 静态编译包

系统版本 Ubuntu20.04 去现场部署项目,发现现场的设备连接的内网,无法使用apt直接安装ffmpeg ,想解决也简单,数据线连接手机使用共享网络,再使用命令sudo apt install ffmpeg安装即可,奈何现场百多台设备&a…

C语言高级编程技巧与最佳实践

C语言高级编程技巧与最佳实践 - 完整版 目录 宏定义与预处理技巧内存管理高级技巧函数指针与回调机制数据结构设计并发与多线程错误处理与异常机制性能优化技巧调试与测试技巧跨平台编程安全编程实践综合演示示例 宏定义与预处理技巧 1. 条件编译与平台检测 /*** 平台和编译…

cygwin+php教程(swoole扩展+redis扩展)

cygwin 1.下载cygwin安装程序 :在Windows上获得Linux的感觉 ​ 2. 打开安装包:setup-x86_64.exe 3.选择安装类型 从互联网安装首次安装下载而不安装仅下载软件包不安装从本地目录安装迁移程序时使用 4.选择安装目录 5.选择本地软件包目录&#xff…

Ethereum: Uniswap V3核心”Tick”如何引爆DEX的流动性革命?

大家好,今天,我们来聊聊一个在去中心化交易所(DEX)领域,尤其是自Uniswap V3问世以来,变得至关重要的概念——Tick(流动性边界)。 如果大家接触过DeFi,可能听说过Uniswap …

【概念学习】什么是深度学习

人工智能 人工智能的简洁定义如下:努力将通常由人类完成的智力任务自动化。 因此,人工智能是一个综合性的领域,不仅包括机器学习与深度学习,还包括更多不涉及学习的方法。 在相当长的时间内,许多专家相信,只…

【MATLAB】(八)矩阵

一.矩阵的定义MATLAB 以矩阵作为数据操作的基本单位,这使得矩阵运算变得非常简捷、方便、高效。矩阵是由m*n个数q(i1,2,…,m;j1,2,…,n),排成的m行n列数表,记成称为 mxn 矩阵,也可以记成aij或Am*n。其中,i表示行数,j表…

python的高校考研交流系统

前端开发框架:vue.js 数据库 mysql 版本不限 后端语言框架支持: 1 java(SSM/springboot)-idea/eclipse 2.NodejsVue.js -vscode 3.python(flask/django)–pycharm/vscode 4.php(thinkphp/laravel)-hbuilderx 数据库工具:Navicat/SQLyog等都可以 在当今社…

从零开始部署Qwen3-8b大模型到本地

一、方法一(使用docker镜像进行部署) 安装Linux服务器,本机测试系统为Ubuntu系统;(带有2张A100的GPU服务器) 思路为:使用docker部署python环境镜像在此基础上安装vllm拉取Qwen3-8b模型 docker-compose.yml文件部分配…

AI产品经理如何理解和应用Transformer架构,以提升产品的技术能力和用户体验?

​你好,我是 ✨三桥君✨ 助你迈向AGI时代!!! 📌本文介绍📌 >> 一、引言 在当今的AI浪潮中,Transformer架构已不再是一个陌生的技术名词。从OpenAI的GPT系列到Google的BERT,再…

数据结构(四)内核链表、栈与队列

一、内核链表基础1. 什么是 Linux 内核链表?Linux 内核链表是一种高效的 双向循环链表,广泛应用于内核模块开发中,用于管理数据结构。每个节点通过指针连接前一个和后一个元素,实现插入和删除的高性能。2. 链表的定义与初始化在 L…

软考信息安全工程师11月备考

目前是在职备考,主业是移动端开发工程师。第一个月(8.4-9.6),将分享完下面所有章节内容,平均不到两天更新一节1.网络信息安全概述2.网络攻击原理与常用方法3.密码学基本理论4.网络安全体系与网络安全模型5.物理与环境安全技术6.认证技术与原理…

使用DrissionPage实现xhs笔记自动翻页并爬取笔记视频、图片

使用DrissionPage实现xhs笔记自动翻页并爬取笔记视频、图片 声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 本文章未经…

使用 input 上传文件, 选择文件后再次修改文件再上传失败( <input type=“file“ /> 自定义上传)

业务实际需求:点击【选择】按钮先选择文件,展示文件的详情:类型,大小,日期......点击【上传】按钮这个时候才去上传文件如图:BUG复现:点击上传文件后发现xlsx文件有些数据没填写,然后…