3.21系统栈、数据结构栈、栈的基本操作、队列、队列的基本操作------------》

先进后出、后进先出

一、系统栈


大小:8MB

1、局部变量

2、未经初始化为随机值

3、代码执行到变量定义时为变量开辟空间

4、当变量的作用域结束时回收空间

5、函数的形参和返回值

6、函数的调用关系、保护现场和恢复现场

7、栈的增长方向,自高向低增长

二、栈:FILO


怎样具备先进后出、后进先出?

类似羽毛球桶

FILO(栈)


只允许从一端进行数据的插入和删除的线性存储结构(线性表)(一对一的线性存储结构,与顺序表、链式表类似)

插入:入栈、压栈 — 栈顶(允许操作)

删除:出栈、弹栈 — 栈底(不允许操作)顺序表——顺序栈
满增栈        满减栈        空增栈        空减栈

入栈时操作方法不同

满、空栈

栈顶所在位置是否存有元素

增、减栈
取决于栈增长的方向

增:栈顶由低地址向高地址

减:栈顶由高地址向低地址

链式表——链式栈


栈顶、栈底

三.栈的基本操作:

注:只针对于链式栈

1.创建栈

  5 LINKSTACK_LIST *creat_link()6 {7     LINKSTACK_LIST *plist = malloc(sizeof(LINKSTACK_LIST));8     if(NULL == plist)9     {10         perror("fail to malloc!");11         return NULL;12     }13     plist->phead = NULL;14     plist->clen = 0;15     16     return plist;17 }

2.入栈(头插)

 26 int push_head_linkstack(LINKSTACK_LIST *plist,DATA_TYPE data)27 {28     LINKSTACK_NODE *pnode = malloc(sizeof(LINKSTACK_NODE));29     if(NULL == pnode)30     {31         perror("fail to malloc");32     }33     pnode -> data = data;34     pnode ->pnext = NULL;35     36     pnode ->pnext = plist->phead;37     plist->phead = pnode;38 39     plist->clen++;40     return 0;41 }

3.出栈

 42 /* 出栈 shanchu*/43 int pop_head_delete(LINKSTACK_LIST *plist)44 {45     46     LINKSTACK_NODE *save = malloc(sizeof(LINKSTACK_NODE));                                                                                                                                              47     LINKSTACK_NODE *ptmp = NULL;48     if(is_empty_linkstack(plist))49     {50         printf("kong ");51         return 0;52     }53     else54     {55         ptmp = plist->phead ;56         if(ptmp->pnext == NULL)57         {58             plist->phead = NULL;59             save->data = ptmp->data;60             printf("删除的值:%d \n",save->data);61             free(ptmp);62         }63         else64         {65             plist -> phead = ptmp -> pnext;66             save->data = ptmp->data;67             printf("删除的值:%d \n",save->data);68             free(ptmp);69         }70 //      free(save);71     }72 }

4.获取栈顶元素

 93 /*获取栈顶元素*/94 int linkstack_top_msg(LINKSTACK_LIST *plist)95 {96     LINKSTACK_NODE *p = malloc(sizeof(LINKSTACK_NODE));97     LINKSTACK_NODE *ptmp = NULL;98     if(is_empty_linkstack(plist))99     {
100         return 0;
101     }
102     else
103     {
104         ptmp = plist->phead;
105         p = ptmp;
106         printf("顶端元素:%d \n",p->data);
107     }   
108 
109 }

5.清空栈

110 /*清空栈*/
111 int linkstack_msg_isempty(LINKSTACK_LIST *plist)
112 {
113     LINKSTACK_NODE *ptmp = plist->phead;
114     if(is_empty_linkstack(plist))
115     {
116         return 0;
117     }
118     else
119     {
120         while(ptmp!=NULL)
121         {
122             ptmp = ptmp -> pnext;
123             pop_head_delete(plist);
124         }
125     }
126 }

6.销毁栈

127 /*销毁*/
128 int linkstack_destory(LINKSTACK_LIST *plist)
129 {
130     linkstack_msg_isempty(plist);
131     free(plist);
132 }
133 

7.测试遍历.

 74 /*遍历*/75 void list_for_each(LINKSTACK_LIST *plist)76 {77     if(is_empty_linkstack(plist))78     {79         printf("空");80         return ;81     }82     LINKSTACK_NODE *ptmp = plist->phead;83 84     while(ptmp != NULL)85     {86         printf("%d ",ptmp->data);87         ptmp = ptmp -> pnext;88 89     }90     putchar('\n');91     return ;92 }

四、队列:FIFO

概念

允许从一端进行数据插入,而另一端进行数据删除的线性表

特性

先进先出、后进后出

应用场景:缓冲区(数据缓存)

为了解决高速设备和低速设备交互时速度不匹配问题,进行缓存(缓冲)

队列的基本操作

1.创建队列

  5 /*创建队列*/6 QUEUE_LIST *creat_link()7 {8     QUEUE_LIST *plist = malloc(sizeof(QUEUE_LIST));9     if(NULL == plist)10     {11         perror("fail to malloc!");12         return NULL;13     }14     plist->phead = NULL;15     plist->preal = NULL;16     plist->clen = 0;17 18     return plist;19 }

2.入队

 25 /*入队*/26 int push_tail_queue(QUEUE_LIST *plist,DATA_TYPE data)27 {28 29     QUEUE_NODE *pnode = malloc(sizeof(QUEUE_NODE));30     if(NULL == pnode)31     {32         perror("fail to malloc");33         return 0;34     }35     pnode->data = data;36     pnode ->pnext =NULL;37 38     if(plist->preal != NULL)39     {40         plist->preal->pnext = pnode;41         plist->preal = pnode;42     }43     else    44     {45         plist->preal = pnode;46         plist->phead = pnode;47     }48     plist->clen++;49 }

3.出队

 50 /*出队*/51 int pop_tail_delete(QUEUE_LIST *plist)52 {53     QUEUE_NODE *ptmp;54     QUEUE_NODE *save;55     if(is_empty_queue(plist))56     {57         printf("kong ");58         return 0;59     }60     else61     {   62         if(plist->phead->pnext ==NULL) //仅有一个数据63         {64             free(plist->phead);65             plist->phead = plist->preal =NULL;66         }67         else//多个数据68         {69             ptmp = plist->phead->pnext;70             save = ptmp;71             free(plist->phead);72             plist->phead = ptmp;73             printf("对头第一个数据:%d \n",save->data);74         }75         plist->clen--;76     }77 }78 

4.清空队列

114 /*清空队列*/
115 int queue_empty(QUEUE_LIST *plist)
116 {
117     QUEUE_NODE *ptmp = plist->phead;
118     if(is_empty_queue(plist))
119     {
120         return 0;
121     }
122     else
123     {   
124         while(ptmp!=NULL)
125         {
126             ptmp = ptmp -> pnext;
127             pop_tail_delete(plist);
128         }
129 
130     }
131 
132 }

5.获取队列队头的数据

96 /*获取队头信息*/97 int queue_top_msg(QUEUE_LIST *plist)98 {99     QUEUE_NODE *p=malloc(sizeof(QUEUE_NODE));
100     QUEUE_NODE *ptmp;
101     
102     if(is_empty_queue(plist))
103     {
104         return 0;
105     }
106     else
107     {
108         ptmp = plist->phead;
109         p = ptmp;
110         printf("队头数据: %d \n",p->data);
111     }
112 
113 }

6.销毁队列

133 /*销毁队列*/
134 int queue_destort(QUEUE_LIST *plist)
135 {
136     queue_empty(plist);
137     free(plist);
138 }

7.测试(遍历)

 79 /*遍历*/80 void queue_for_each(QUEUE_LIST *plist)81 {82     if(is_empty_queue(plist))83     {84         printf("空");85         return ;86     }87     QUEUE_NODE *ptmp = plist->phead;88     while(ptmp != NULL)89     {90         printf("%d ",ptmp->data);91         ptmp=ptmp->pnext;92     }93     putchar('\n');94     return ;95 }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/761467.shtml

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

相关文章

【Linux进程的状态】

目录 看Linux源码中的说法 如何查看进程状态? 各个状态的关系 僵尸进程 举个栗子 现象 僵尸进程的危害 孤儿进程 举个栗子 现象 进程的优先级 基本概念 为什么要有进程优先级? 查看系统进程 进程的大致属性 进程优先级vs进程的权限 Linu…

[Semi-笔记] 2023_TIP

目录 概要一:Conservative-Progressive Collaborative Learning(保守渐进式协作学习)挑战:解决: 二:Pseudo Label Determination for Disagreement(伪标签分歧判定)挑战:…

利用python进行接口测试及类型介绍

前言 其实我觉得接口测试很简单,比一般的功能测试还简单(这话我先这样说,以后可能会删O(∩_∩)O哈!),现在找工作好多公司都要求有接口测试经验,也有好多人问我(也就两三个人&#x…

解决微信小程序代码包大小限制方法

1 为什么微信小程序单个包的大小限制为 2MB 微信小程序单个包的大小限制为 2MB 是出于以下几个考虑: 保证小程序的启动速度:小程序的启动速度是影响用户体验的关键因素之一。如果包太大,会导致小程序启动时间过长,从而影响用户体…

node安装

这里写目录标题 https://nodejs.cn/ https://registry.npmmirror.com/binary.html?pathnode/ https://registry.npmmirror.com/binary.html?pathnode/v11.0.0/

一、rv1126开发之视频输入和视频编码

RV1126 H264/HEVC编码流程 一、RV1126编码的流程图: 二、每个代码模块详细讲解 2.1. VI模块的创建 VI模块的初始化:关键在于VI_CHN_ATTR_S结构体,这个结构体是VI设置的结构体。这个结构体的成员变量包括:pcVideoNode&#xff0…

[力扣 129]求根节点到叶节点之和

题目描述: 思路: 可以采用递归回溯。递归访问左->右->根节点并记录路径。到叶节点后,计算数字并相加。 代码: class Solution:def sumNumbers(self, root: TreeNode) -> int:res 0path []def backtrace(root):nonl…

Autosar Crypto Driver学习笔记(二)

文章目录 Crypto DriverFunction definitionsGeneral APICrypto_InitCrypto_GetVersionInfo Job Processing InterfaceCrypto_ProcessJob Job Cancellation InterfaceKey Management InterfaceKey Setting Interface密钥设置接口Crypto_KeyElementSetCrypto_KeySetValid Key Ex…

RabbitMQ集群部署

集群部署 我们看看如何安装RabbitMQ的集群。 1.集群分类 在RabbitMQ的官方文档中,讲述了两种集群的配置方式: 普通模式:普通模式集群不进行数据同步,每个MQ都有自己的队列、数据信息(其它元数据信息如交换机等会同…

2024年高压电工证模拟考试题库及高压电工理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年高压电工证模拟考试题库及高压电工理论考试试题是由安全生产模拟考试一点通提供,高压电工证模拟考试题库是根据高压电工最新版教材,高压电工大纲整理而成(含2024年高压电工证…

【Leetcode每日一题】 递归 - Pow(x, n)(难度⭐⭐)(40)

1. 题目解析 题目链接:50. Pow(x, n) 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 2.算法原理 在这个算法中,递归函数的任务是求出 x 的 n 次方。那么,这个函数是怎么工作的呢?它…

es 集群核心概念以及实践

节点概念: 节点是一个Elasticsearch的实例 本质上就是一个JAVA进程一台机器上可以运行多个Elasticsearch进程,但是生产环境一般建议一台机器上只运行一个Elasticsearch实例 每一个节点都有名字,通过配置文件配置,或者启动时候 -…

软件工程-第5章 结构化设计

5.1 总体设计的目标及其表示方法 5.2 总体设计 变换设计基本步骤: 第1步:设计准备--复审并精华系统模型; 第2步:确定输入、变换、输出这三部分之间的边界; 第3步:第一级分解--系统模块结构图顶层和第一层…

产品软文怎么写?媒介盒子分享公式

软文写出来的目的除了提高品牌知名度外,还需要推广产品,当企业新品上市、推广产品以及营销产品的时候,就需要产品类软文出手。然而产品软文想要写好还需要一定的技巧,今天媒介盒子就来和大家分享:产品软文写作公式。 一…

把txt、pdf等文件转为一行一行的doccano数据集输入格式

文章目录 doccano 数据集导入简介代码实现代码运行结果代码公开 doccano 数据集导入 在Doccano 导入数据集时,使用TextLine的文件格式,导入的文件需要为一行一行文本的数据格式,每一行文本在导入Doccano后就是一条数据。 简介 主要工作说明…

[linux]--关于进程概念(下)

目录 孤儿进程 环境变量 将程序放到PATH路径下 设置PATH环境变量 设置别名 环境变量相关的命令 环境变量的组织方式​编辑 通过系统调用获取环境变量 环境变量通常是具有全局属性的 进程优先级 查看系统进程 用top命令更改已存在进程的nice: 程序地址空…

(附源码)基于SSM的校园兼职系统设计与实现

前言 💗博主介绍:✌专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 2024年Java精品实战案例《100套》 🍅文末获取源码联系🍅 &#x1f31…

uniapp ios证书失效

前面是按照网上查找的方法 作者大大的地址 1、一个ios账户(688付费版) 2、登录 Apple Developer 3、创建Identifiers ps:创建时需继承苹果的sdk,只需要一个就行 点击continue再点击Register即可 4、创建.cer证书 &…

tcp seq ack

seq(Sequence Number):32bits,表示这个tcp包的序列号。tcp协议拼凑接收到的数据包时,根据seq来确定顺序,并且能够确定是否有数据包丢失。 ack(Acknowledgment Number):3…

安卓开发日记:实现APP重启逻辑,适用于热更后重启游戏进行加载

可根据合适的弹窗搭配使用重启逻辑,建议使用在热更包加载后使用,帮助部分热更后未及时生效的逻辑范围首先,在逻辑调用Activity类中创建一个成员变量,给后续逻辑接口直接使用 如下 public class MainActivity extends Activity {…