栈
先进后出
stk[N]
代表栈
tt
代表栈顶元素的下标,初始为0
压栈
stk[++tt] = x;
出栈
tt--;
栈是否为空
if (tt > 0) not empty
else empty
栈顶元素
stk[tt];
队列
先进先出,但是用数组模拟的队列实际可以是双端队列,队头队尾均可入队出队
q[N]
代表队列
hh
代表队头元素下标,初始为0
tt
代表队尾元素下标,初始为-1
入队
q[++tt] = x;
出队
hh++;
队列是否为空
if (hh <= tt) not empty
else empty
队头元素
q[hh];
队尾元素
q[tt];
循环队列
q[N]
表示队列,队列元素的范围为[0,N-1]
hh
表示队头,初始为0
tt
表示队尾,初始为0
向队尾插入一个数
q[tt ++ ] = x;
if (tt == N) tt = 0; // 移动到边界
获取队头并弹出
int x = q[hh ++] ;
if (hh == N) hh = 0; // 移动到边界
队头的值
q[hh];
判断队列是否为空
if (hh != tt) not empty;
else empty;
在使用时,注意通常使用下标加入到栈或者队列中,从而可以避免维护last
指针等,方便地求区间