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     else
 54     {
 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         else
 64         {
 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     else
 61     {   
 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 }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言例:设 int x; 则表达式 (x=4*5,x*5),x+25 的值

代码如下&#xff1a; #include<stdio.h> int main(void) {int x,m;m ((x4*5,x*5),x25);printf("(x4*5,x*5),x25 %d\n",m);//x4*520//x*5100//x2545return 0; } 结果如下&#xff1a;

必学干货!使用Python正则表达式匹配多个字符

1.匹配多个字符 今天我们来聊一聊正则表达式中一个很强大的功能&#xff1a;匹配多个字符&#xff01;正则表达式是一个非常强大的工具&#xff0c;可以帮助我们轻松地处理和匹配字符串。通过使用不同的符号和技巧&#xff0c;我们可以匹配多个字符&#xff0c;从而更加灵活地…

【智能算法】海洋捕食者算法(MPA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2020年&#xff0c;Afshin Faramarzi 等人受到海洋生物适者生存启发&#xff0c;提出了海洋捕食者算法(Marine Predators Algorithm&#xff0c;MPA)。 2.算法原理 2.1算法思想 MPA根据模拟自然界…

WSL2的安装步骤

WSL2&#xff08;Windows Subsystem for Linux 2&#xff09;是微软公司开发的一项创新性技术&#xff0c;它在Windows操作系统上提供了一个完整的Linux内核&#xff0c;并允许用户在Windows环境中运行Linux发行版。之前想在Windows上使用Linux系统必须先安装VirtualBox或VMWar…

做跨境用哪种代理IP比较好?怎么选到干净的IP?

代理IP对于做跨境的小伙伴来说&#xff0c;都是必不可少的工具&#xff0c;目前出海的玩法已经是多种多样&#xff0c;开店、账号注册、短视频运营、直播带货、网站SEO等等都是跨境人需要涉及到的业务。而国外代理IP的获取渠道非常多&#xff0c;那么做跨境到底应该用哪种代理I…

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

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

【系统架构设计师】计算机系统基础知识 03

系统架构设计师 - 系列文章目录 01 系统工程与信息系统基础 02 软件架构设计 03 计算机系统基础知识 文章目录 系统架构设计师 - 系列文章目录 文章目录 前言 一、计算机系统概述 1.计算机组成 ​编辑2.存储系统 二、操作系统 ★★★★ 1.进程管理 2.存储管理 1.页式存储 …

python --- 练习题3

目录 1、猜数字游戏&#xff08;使用random模块完成&#xff09; &#xff1a;继上期题目&#xff0c;附加 2、用户登录注册案例 3、求50~150之间的质数是那些&#xff1f; 4、打印输出标准水仙花数&#xff0c;输出这些水仙花数 5、验证:任意一个大于9的整数减去它的各位…

[环境配置].ssh文件夹权限修改方法

问题描述&#xff1a; 通过VSCode中的Remote Explorer或者通过CMD等命令行窗口连接远程机器时&#xff0c;会因为提示 "Bad owner or permissions on C:\\Users\\xxx/.ssh/config"而导致失败&#xff0c;最终呈现在VSCode中的效果是&#xff0c;弹窗提示"Could…

群晖Cloud Sync数据同步到百度云、另一台群晖、nextcloud教程

群晖Cloud Sync数据同步到百度云、另一台群晖、nextcloud教程 为了更好的浏览体验&#xff0c;欢迎光顾勤奋的凯尔森同学个人博客http://www.huerpu.cc:7000 一、群晖套件中下载Cloud Sync 二、同步到百度云盘 打开Cloud Sync&#xff0c;点击左上角的号&#xff0c;云供应商…

归并算法详细解析

归并排序 1945年&#xff0c;约翰冯诺依曼&#xff08;John von Neumann&#xff09;发明了归并排序&#xff0c;这是典型的分治算法的应用。归并排序&#xff08;Merge sort&#xff09;是建立在归并操作上的一种有效的排序算法&#xff0c;该算法是采用分治法&#xff08;Di…

[Semi-笔记] 2023_TIP

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

华工考研复试模板

华工考研复试PPT模板 前言PPT概览PPT章节展示 最后的最后 前言 前段时间&#xff0c;有考研的学弟学妹咨询选导师的相关事项。可能也有的学弟学妹在准备复试相关的PPT&#xff0c; 这里小编我打算这几天DIY一个模板&#xff0c;主要其实还是跟自己之前夏令营的答辩模板和奖学金…

ResNet《Deep Residual Learning for Image Recognition》

ResNet论文学习 引言Deep Residual Learning 深度残差学习Residual Learning 残差学习Identity Mapping by Shortcuts 通过捷径来恒等映射网络结构Plain NetworkResidual Network实现细节 实验总结代码复现Building blockBottleneckResnet 18Resnet 34Resnet 50 引言 深度网络…

23.合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a; 输入&#xff1a;l1 [], l2 [] 输出&#xff1a;[]示…

【计算机考研】杭电 vs 浙工大 怎么选?

想求稳上岸的话&#xff0c;其他几所学校也可以考虑&#xff0c;以留在本地工作的角度考虑&#xff0c;这几所学校都能满足你的需求。 如果之后想谋求一份好工作&#xff0c;肯定优先杭电是比较稳的&#xff0c;当然复习的时候也得加把劲。 这个也可以酌情考虑&#xff0c;报…

TikTok小店运营经验分享,美国本土小店怎么做?

作为资深跨境老玩家&#xff0c;虽不说是经验丰富&#xff0c;至少也是摸清了基本的玩法思路。TikTok作为近来的跨境新蓝海&#xff0c;他的玩法其实并不难&#xff0c;作为第一批试错玩家&#xff0c;今天也诚心给大家分享一些美国本土小店运营经验&#xff0c;感兴趣的话就看…

50、C++/类的继承和多态相关学习20240318

一、c编程实现&#xff1a; 封装一个动物的基类&#xff0c;类中有私有成员&#xff1a;姓名&#xff0c;颜色&#xff0c;指针成员年纪&#xff1b; 再封装一个狗这样类&#xff0c;共有继承于动物类&#xff0c;自己拓展的私有成员有&#xff1a;指针成员&#xff1a;腿的个…

IT部门领导的角色与责任:在挑战中塑造未来

前言 在当今快节奏的商业环境中&#xff0c;IT部门领导扮演着至关重要的角色。他们需要具备技术专长&#xff0c;同时也需要展现出卓越的领导力来有效地管理团队和应对各种挑战。 一、技术创新的引领者 1. 重要角色转变 随着信息技术的迅猛发展&#xff0c;IT部门领导已逐渐…

[QT] QTextBrowser取消默认右键菜单项 复制链接地址

setTextInteractionFlags(Qt::TextSelectableByMouse);原理 QTextBrowser默认下有三个标志位&#xff0c;QTextBrowser右键菜单相关源码如下 源码链接 if ((d->interactionFlags & Qt::LinksAccessibleByKeyboard)|| (d->interactionFlags & Qt::LinksAccessible…