栈
- 栈(Stack):只允许在一端插入或删除的线性表
- 栈顶:线性表允许进行插入或删除的那一端
- 栈底:固定的,不允许进行插入和删除的另一端
- 特点:是受限的线性表,拥有线性关系;后进先出LIFO
顺序栈
- 使用顺序存储,自底向上存储数据元素,指针指向栈顶元素的位置
- 操作
s.top = -1;
s.data[++s.top] = x;
x = s.data[s.top--];
x = s.data[s.top];
共享栈
- 两个栈共享一个一维数组空间
- 两个栈分别设置在共享空间两端
- 栈顶指向中间延伸位置
- 有利于空间使用
链式栈
队列
- 允许在一端插入,另一端删除的线性表
- 队头:允许删除的一端
- 队尾:允许插入的一端
- 先进先出FIFO
顺序队列
- 连续的存储单元
- 头指针指向队头元素
- 尾指针指向队尾元素
循环队列
Q.rear = Q.front = 0;
rear = (rear + 1) % MaxSize;
front = (front + 1) % MaxSize;
queueLen = (rear + MaxSize - front) % MaxSize;
(Q.rear + 1) % MaxSize = Q.front;
Q.front = Q.rear;
Q.size = 0;
Q.size = MaxSize;
tag = 0;
tag = 1;
链式队列
双端队列
- 允许两端可以入队和出队
- 输出受限的双端队列:允许一端进行插入和删除,另一端只允许插入的双端队列
- 输入受限的双端队列:允许一端进行插入和删除,另一端只允许删除的双端队列
应用
栈在括号匹配的应用
算法思想
- 空栈,一次读入一个符号
- 右括号:使栈顶元素消解,或不合法(序列不匹配,退出程序)
- 左括号:放入栈顶,作为更高优先级的一个元素,栈为空,否则括号序列不匹配
栈在表达式中的应用
栈在递归中的应用
- 原理:将原始问题转换为相同属性的小规模问题
- 求出递归表达式
- 边界条件(递归出口)
队列
队列在层次遍历的应用
队列在计算机系统中的应用
- 解决主机与外设之间速度不匹配的问题
- 解决多用户引起的资源竞争问题
特殊矩阵压缩存储
数组的存储结构
- 行优先:先存储行号较小的元素,行号相等先存储列号小的元素
- 列优先:先存储列好较小的元素,列号相等先存储行号小的元素
n阶对称矩阵
- 上三角、主对角线、下三角,其中上下三角元素相同
- 通常不使用二维数组存储,使用一维数组存储,元素在数组中下标为
- 元素下标之间的对于关系
n阶三角矩阵
- 下三角矩阵(上三角区元素为常量)和上三角矩阵(下三角矩阵元素为常量)
- 通常不使用二维数组存储,使用一维数组存储,元素在数组中下标为$k
- 下三角矩阵的的元素下表之间的对应关系
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律