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,一经查实,立即删除!

相关文章

5.1.5、【AI技术新纪元:Spring AI解码】HuggingFace Chat

HuggingFace 推理端点允许您在云中部署和提供机器学习模型,使其可以通过 API 访问。 入门 关于 HuggingFace 推理端点的更多详细信息可以在此处找到。 先决条件 添加 spring-ai-huggingface 依赖项: <dependency><groupId>org.springframework.ai</groupId…

【Linux进程的状态】

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

[Semi-笔记] 2023_TIP

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

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

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

python离线安装依赖库 依赖库版本

问题&#xff1a;python开发过程中&#xff0c;下载安装某一功能模块&#xff0c;常常需要各种依赖库支持。如果在线安装&#xff0c;则非常方便简单&#xff0c;但往往需要离线下载所需的依赖库。但各种依赖库存在许多版本&#xff0c;如何准确快速知道我们所需要的依赖库呢&a…

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

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

node安装

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

初识CSS样式 与 文本背景样式

目录 前言: 1.什么是CSS: 2.关于css的主要特性: 2.1层叠性&#xff1a; 2.2继承性&#xff1a; 2.3优先级&#xff1a; 2.4.CSS的组成结构: 3.css样式的三种写法: 3.1内联样式&#xff1a; 3.1.2存在的优点和缺点: 3.2内部样式表&#xff1a; 3.2.2存在的优点和缺点:…

JAVA 100道题(11)

11.使用ArrayList存储一组整数&#xff0c;并编写一个方法打印所有偶数。 它使用ArrayList来存储一组整数&#xff0c;并编写一个方法来打印所有的偶数。 java复制代码 import java.util.ArrayList; public class Main { public static void main(String[] args) { // 创建一个…

[蓝桥杯 2019 省 A] 修改数组

题目链接 [蓝桥杯 2019 省 A] 修改数组 题目描述 给定一个长度为 N N N 的数组 A [ A 1 , A 2 , A 3 , . . . , A N ] A [A_1, A_2, A_3, ...,A_N] A[A1​,A2​,A3​,...,AN​]&#xff0c;数组中有可能有重复出现的整数。 现在小明要按以下方法将其修改为没有重复整数的…

Java实现Cache Aside Pattern 例子

简单的Java实现Cache Aside pattern &#xff1a; import java.util.HashMap; import java.util.Map;public class CacheAsidePattern {// 模拟数据库或其他数据源static class Database {private static Map<String, String> data new HashMap<>();static {data…

CAN总线Stuff Error

CAN总线Stuff Error&#xff0c;即填充错误&#xff0c;指的是在使用位填充编码的位流中&#xff0c;出现了第六个连续相同的位电平。这种错误通常发生在位填充机制被用于CAN总线通信中&#xff0c;以确保数据传输的正确性和稳定性。以下是一些可能导致Stuff Error的原因&#…

每日三个JAVA经典面试题(十九)

1.Java Concurrency API 中的 Lock 接口(Lock interface)是什么&#xff1f;对比同步它有什么优势&#xff1f;Java并发API中的Lock接口提供了一种比传统synchronized块或方法更灵活、更强大的线程同步机制。Lock接口允许更细粒度的锁控制&#xff0c;通过它可以实现更复杂的线…

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

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

php实现二进制权限控制示例,二进制权限控制实现思路,二进制权限控制逻辑,二进制权限控制好处,二进制权限控制弊端,二进制权限控制存权限查权限

背景:在群里看到大佬们分享这个知识点自己实操了一下做了个总结 1.二进制权限控制实现原理思路及逻辑 对于二进制权限控制,一个常见的做法是将权限用一个整数表示,然后将这个整数转换为二进制进行存储和查找。以下是一种简单的实现思路: 存储权限信息: 将权限信息转换为…

震惊!!!原来这就是操作系统

震惊!!!原来这就是操作系统 一:什么是操作系统1:管理2:操作系统的组成 二:进程:1:概念2:进程的管理方式2.1:描述2.2:组织 一:什么是操作系统 CPU,内存,硬盘…这些都是硬件,而操作系统就是软件,可以让计算机按照一定的规则进行执行. 软件是一组指令的集合, 1:管理 **操作系统…

flask之请求钩子

请求钩子是通过装饰器的形式实现&#xff0c;Flask支持如下四种请求钩子&#xff1a; 1、before_first_request: 在第一次请求处理之前先被执行 2、before_request: 在每次请求前执行 3、after_request: 在每次请求处理之后被执行 接受一个参数&#xff1a;视图函数的响应在…

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

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

Python如何行转列代码

在Python中&#xff0c;如果你想要对数据框&#xff08;DataFrame&#xff09;中的某一列进行操作&#xff0c;你可以使用Pandas库&#xff0c;这是处理数据时常用的一个库。以下是一个简单的例子&#xff0c;展示了如何对DataFrame中的某一列进行操作&#xff1a; 首先&#…

anuglar中获取iframe对象, 用iframe进行postMessage通信

如果你想在 Angular 中获取 iframe 对象并确保 iframe 加载完成后调用 postMessage 发送消息&#xff0c;可以按照以下步骤进行操作&#xff1a; 在 HTML 模板中&#xff0c;使用 ngIf 来控制 iframe 的显示与隐藏&#xff0c;并为 iframe 添加一个标识符&#xff08;例如 #my…