用数组模拟栈、队列、循环队列

数组模拟栈

tt表示栈顶,习惯从下标1开始存储,tt=0表示栈空。tt表示栈内元素个数。
int stk[N], tt = 0;

向栈顶插入一个数
stk[ ++ tt] = x;

从栈顶弹出一个数
tt -- ;

取栈顶的值
stk[tt];

判断栈是否为空
if (tt > 0){ 非空 }

数组模拟队列

hh 表示队头,tt表示队尾,队尾插入,队头取出。

普通队列:
int q[N], hh = 0, tt = -1;
习惯从下标0开存储,hh>tt表示队列空,
hh==tt 时说明队列中只有一个元素,tt-hh+1表示队列中元素个数。

向队尾插入一个数
q[ ++ tt] = x;

取队头的值 q[hh];
取队尾 q[tt]

从队头弹出一个数
hh ++ ;

队尾tt指向当前队尾的最后一个数,即要插入的位置前一个位置(在++后才指向要插入的位置),因此先++tt,再插入
队头hh,指向当前要弹出的位置,先弹出,再++

扫描二维码关注公众号,回复: 12871358 查看本文章

判断队列是否为空
if (hh <= tt){ 非空 }

循环队列:
int q[N];

初始化时:hh=tt=0
所以判断队列为空的条件:hh==tt

插入数和普通队列有区别:
普通队列是先++,再存数,tt的位置就是存数的最后一个位置;栈也是先++,再存储。
循环队列是先存数,再++,tt的位置就是将要存数的位置。

插入数:
q[tt]=x; tt=(tt+1)%N; 或者q[tt++]=x; if(tt==N) tt=0;
取数同理:
q[hh]=x; hh=(hh+1)%N; 或者q[hh++]=x; if(hh==N) hh=0;

循环队列的应用

猜你喜欢

转载自blog.csdn.net/HangHug_L/article/details/113782329