1. 栈(LIFO)
顺序栈:采用顺序存储结构的栈。(注意top指向的是栈顶元素还是栈顶元素的下一个位置)
链栈:采用链式存储结构的栈。(规定操作在表头进行;建议不带头结点,头指针就够了)
共享栈:两个顺序栈共享一个一维数组空间。栈底在空间两端,栈顶向中间延伸。
栈的应用
- 括号匹配中:左括号则入栈,每出现一个右括号消耗一个左括号
- 表达式求值中:中缀表达式转后缀/前缀表达式; 计算后缀表达式(从左往右),前缀表达式(从右往左)。
- 递归中:利用递归工作栈进行相关数据的存储。 (递归多次->栈溢出,重复计算->效率低。非递归用递归的算法完成要自定义栈。)
- 进制转换、迷宫求解等。
2. 队列(FIFO)
循环队列:逻辑上视为一个环。
队满判断:①牺牲一个单元格来区分队空队满 ②记录个数size ③用tag确定操作为删除还是插入
链式队列:采用链式存储结构的队列。(带头结点更方便)
双端队列:两端都可入队出队。
队列的应用
- 层次遍历中:保存下一层的处理顺序
- 计算机系统中:主机与外设速度不匹配问题(缓冲区),多用户的资源竞争问题(如cpu分配)
- 页面替换算法等
3. 数组
数组的存储结构:一维,多维(行优先 / 列优先)
特殊矩阵的压缩存储:
- 对称矩阵——存含主对角的三角部分
- 三角矩阵——存含主对角的三角部分+常量值
- 三对角矩阵——按行优先存储3条对角线区域
稀疏矩阵存储:
- 三元组存储(行标,列标,值)。失去随机存取特性
- 十字链表法存储