栈与队列
栈
先进后出 FILO 队列。用数组来模拟栈:
初始化:
stk[N]
表示栈,可以看作一个竖起来的数组,底部是 0tt
表示栈顶元素下标- 栈只关心栈顶元素,不关心数组模拟栈的内部其他元素
操作:
- 插入:
stk[++ tt] = x;
- 弹出:
tt --;
- 判空:
tt > 0
不为零就是不空 - 取顶:
stk[tt]
队列
先进先出 FIFO 队列。用数组来模拟队列:
初始化:
q[N]
表示队列,可以看作前后开口的数组hh
队头下标,负责弹出元素tt
队尾下标,负责插入元素- 习惯上
hh = 0, tt = -1
操作:
- 插入:
q[++ tt] = x;
- 弹出:
hh ++;
- 判空:
hh <= tt
队尾比队头下标小就非空 - 取头:
q[hh]
- 取尾:
q[tt]
循环队列
hh = 0, tt = 1
习惯上- 判空
hh == tt
此时队列为空 - 每次入队或出队都要
if (hh == N) hh = 0;
或者if (tt = N) tt = 0;