框架
线性表 | ||||||||
操作受限(逻辑结构相同,均是线性表) | 数组 | |||||||
栈 | 队列 | 一维数组 | 多维数组 | |||||
顺序栈 | 链栈 | 共享栈 | 循环队列 | 链式队列 | 双端队列 | | 压缩矩阵 | 稀疏矩阵 |
栈
定义:只允许在一端进行插入删除操作。(先进后出)
(n个元素依次入栈,出栈序列个数为
)
顺序栈,数组存。链栈,链表存。
共享栈,两个栈共用一块一维数据区间。一个从头开始,一个从尾开始。共享栈是为了有效利用存储空间,两个栈的空间相互调节,只有在整个存储空间被占满时才上溢,存取数据时间复杂度均为O(1)。
队列
定义:一种操作受限的线性表,只允许在表的一端进行插入,另一边进行删除(先进先出)
1)顺序存储
两个指针,一个指头一个指尾。
循环队列。
(具体的判空满的条件与指针具体指的位置有关。)
- 牺牲一个单元来区分队空队满。
- 类型中增设表示元素个数的数据成员。
- 类型中增设tag数据成员,front==rear时,tag==0,队空,tag==1,队满
2)队列链式存储。
同时带有队头指针和队尾指针的单链表。
3)双端队列
定义:两头即可入亦可出的队列。
安序入a(1,2,3,...,n)
输出受限的双端队列:在一端即可入亦可出,另一端只可入的双端队列。(输出的结果不可能,大的在两个比他小的元素中间。例:4132,4231)
输入受限的双端队列:在一端即可入亦可出,另一端只可出的双端队列。(输出的结果不可能,先中间后两边。例:4213,4231)
栈的应用:
括号匹配
后缀表达式(这算是一个重难点了,但是把握一点,给运算符号赋个值,作为优先级,优先级大的先运算。)
操作符 | # | ( | *,/ | +,- | ) |
isp(in stack priority) | 0 | 1 | 5 | 3 | 6 |
icp(in coming priority) | 0 | 6 | 4 | 2 | 1 |
队列应用:
层序遍历