# 数组模拟栈和队列

数组模拟栈和队列

不开\(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)
{

}
posted @ 2020-02-09 10:22  yhsmer  阅读(194)  评论(0)    收藏  举报