# 数组模拟栈和队列
数组模拟栈和队列
不开\(O_2\)优化时,数组效率远高于STL,如果开\(O_2\)效率则差不多
栈
// tt表示栈顶,tt对应的stk[tt]是有值的
int stk[N], tt = -1;
// 向栈顶插入一个数
stk[ ++ tt] = x;
// 从栈顶弹出一个数
tt -- ;
// 栈顶的值
stk[tt];
// 判断栈是否为空
if (tt >= 0)
{
}
普通队列
// hh 表示队头,tt表示队尾
//其中hh下标对应的q[hh]是有值的,而tt下标对应的q[tt]是没有值的
int q[N],hh=0,tt=0;
// 向队尾插入一个数
q[tt ++ ] = x;
// 从队头弹出一个数
hh ++ ;
// 队头的值
q[hh];
// 判断队列是否为空
if (hh <= tt)
{
}
循环队列+双端队列
// hh 表示队头,tt表示队尾的后一个位置
//其中hh下标对应的q[hh]是有值的,而tt下标对应的q[tt]是没有值的
int q[N], hh = 0, tt = 0;
// 向队尾插入一个数
q[tt ++ ] = x;
if (tt == N) tt = 0;
//向对头插入一个数
hh --;
if(hh<0)hh=N-1;
q[hh]=x;
// 从队头弹出一个数
int tp = q [hh ++ ];
if (hh == N) hh = 0;
// 判断队列是否为空
if (hh != tt)
{
}

浙公网安备 33010602011771号