当前位置: 首页 > news >正文

数据结构3.0 栈、队列和数组

一、栈的基本概念

①栈的定义

②栈的基本操作

③常考题型

④小结

二、栈的顺序存储实现

①顺序栈的定义

②初始化操作

③进栈操作

④出栈操作

⑤读栈顶元素操作

⑥共享栈

⑦小结

三、栈的链式存储实现

①链栈的定义

②小结

#include <stdio.h> #include <stdlib.h> // 链栈的结点结构 typedef struct LinkNode { int data; // 数据域 struct LinkNode *next; // 指针域 } LinkNode; // 链栈结构(不带头结点,栈顶指针直接指向栈顶元素) typedef struct { LinkNode *top; // 栈顶指针 } LinkStack; // 1. 初始化链栈 void InitStack(LinkStack &S) { S.top = NULL; // 空栈时栈顶指针为NULL } // 2. 判断栈是否为空 bool StackEmpty(LinkStack S) { return S.top == NULL; } // 3. 进栈操作(增) bool Push(LinkStack &S, int x) { // 生成新结点 LinkNode *p = (LinkNode *)malloc(sizeof(LinkNode)); if (p == NULL) return false; // 内存分配失败 p->data = x; p->next = S.top; // 新结点的next指向原栈顶 S.top = p; // 更新栈顶指针 return true; } // 4. 出栈操作(删) bool Pop(LinkStack &S, int &x) { if (StackEmpty(S)) return false; // 栈空,出栈失败 LinkNode *p = S.top; // 指向栈顶结点 x = p->data; // 获取栈顶元素 S.top = S.top->next; // 栈顶指针下移 free(p); // 释放原栈顶结点 return true; } // 5. 获取栈顶元素(查) bool GetTop(LinkStack S, int &x) { if (StackEmpty(S)) return false; // 栈空,获取失败 x = S.top->data; return true; } // 测试函数 int main() { LinkStack S; InitStack(S); // 进栈 Push(S, 1); Push(S, 2); Push(S, 3); // 获取栈顶 int topVal; if (GetTop(S, topVal)) { printf("栈顶元素:%d\n", topVal); } // 出栈 int popVal; while (Pop(S, popVal)) { printf("出栈元素:%d\n", popVal); } // 判空 if (StackEmpty(S)) { printf("栈已为空\n"); } return 0; }

四、队列的基本概念

①队列的定义

②队列的基本操作

③小结

五、队列的顺序实现

①初始化操作

②入队操作

③循环队列

④循环队列——入队操作

⑤循环队列——出队操作

⑥判断队列已满/已空

⑦小结

六、队列的链式实现

①初始化(带头结点)

②初始化(不带头结点)

③入队(带头结点)

④入队(不带头结点)

⑤出队(带头结点)

⑥出队(不带头结点)

⑦队列满的条件

⑧小结

七、双端队列

http://www.jsqmd.com/news/263754/

相关文章:

  • 算子优化实战:手写 Triton Kernel,将 LayerNorm 算子的执行时间压缩 50%
  • 深度测评自考必备一键生成论文工具TOP8
  • Linux实操篇
  • 51单片机智能遮阳篷窗户帘衣架蓝牙APP光雨滴检测41(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • Java 并发探秘:JCTools 源码剖析,为什么 Netty 放弃 JDK 自带队列而选择 MpscArrayQueue?
  • todo
  • Go 调度器 (GMP) 揭秘:从汇编角度看 Goroutine 是如何实现“协程切换”的?
  • 【创新未发表】基于matlab鸡群算法CSO和自适应双种群协同鸡群算法ADPCCSO无人机避障三维航迹规划【含Matlab源码 14980期】
  • 第 174 场双周赛Q2——3810. 变成目标数组的最少操作次数
  • 【无人机三维路径规划】基于matlab鸡群算法CSO和自适应双种群协同鸡群算法ADPCCSO复杂山地模型下无人机路径规划【含Matlab源码 14981期】
  • Day22-20260118
  • 强烈安利9个AI论文写作软件,专科生搞定毕业论文!
  • 【雷达跟踪】基于matlab面向目标跟踪的雷达干扰方法:提升航空器战场生存力的关键技术【含Matlab源码 14983期】复现含文献
  • 【雷达相控阵】毫米波相控阵中空间Zadoff-Chu调制快速波束对准【含Matlab源码 14977期】
  • 卷积神经网络的开端:$LeNet-5$
  • 【雷达相控阵】基于matlab毫米波相控阵中空间Zadoff-Chu调制快速波束对准【含Matlab源码 14977期】
  • 【心电信号ECG】SVM心电图心搏检测与分类【含Matlab源码 14982期】复现含文献
  • 【心电信号ECG】基于matlab SVM心电图心搏检测与分类【含Matlab源码 14982期】复现含文献
  • 【心血管疾病】心脏病数据集Kaggle医学特征二元分类预测心血管疾病【含Matlab源码 14984期】含报告
  • 社交网络数据科学:完整项目实战指南
  • Hive与DynamoDB集成:云原生大数据方案
  • 【创新未发表】鸡群算法CSO和自适应双种群协同鸡群算法ADPCCSO无人机避障三维航迹规划【含Matlab源码 14980期】
  • Flutter × OpenHarmony 跨端汇率转换应用:货币数据模型与页面实现
  • 【无人机三维路径规划】鸡群算法CSO和自适应双种群协同鸡群算法ADPCCSO复杂山地模型下无人机路径规划【含Matlab源码 14981期】
  • 【雷达跟踪】面向目标跟踪的雷达干扰方法:提升航空器战场生存力的关键技术【含Matlab源码 14983期】复现含文献
  • 数电实验7【计数器和跑马灯设计实验报告】数字电路 逻辑与计算机设计 logisim
  • 人工智能之核心基础 机器学习 第十七章 Scikit-learn工具全解析
  • 完整教程:C#用API添另静态路由表
  • 消除乱码-UTF8字符转换
  • 使用Dockerfile创建一个hyperf容器做为开发环境