栈和队列指针状态(按严蔚敏版数据结构的要求)
只写了主要易考的(其实是为了方便我,哈哈),写的很随意可能有些没写对的地方请大家指正
一、栈
1、顺序栈(Top始终在元素的下一位置)
栈空:Top==0
入栈:S[Top++]=x
出栈:x=S[- -Top]
栈满:Top == MAXSIZE
2、共享栈
栈空:top1==-1&&top2==MAXSIZE
1号入栈:s[top1++]=x
2号入栈:s[top2- -]=x
1号出栈:x=s[- -top1]
2号出栈:s[++top2]=x
栈满:top2-top1 == 1
二、队列
1、链式队列
空队:头尾指针都指向一个空节点
入队:front指针充当头结点(无数据),rear指针向后移加入数据
出队:front指向下一个节点,意思原本的就脱离链表相当于删除了
2、顺序队列
<与栈的顺序表示一致,位置相当于front在栈底(出队),rear在栈顶(入队)>
空队:front=rear=0
入队:rear++
出队:front++
当front+1=rear&&rear==MAXSIZE-1时,即队头的下一位是队尾而且队尾已达到最大,有可能会出现假溢出(实际上front之前的位置没有数据),因此就有了循环队列,就是把数组变成一个圈(假设出的),让数组的首尾相连。
2、循环队列(牺牲一个空间来辨别队满)
空队:front=rear=0
入队:(rear+1)%M
出队:(front+1)%M
满队:rear= =front
求队中元素个数:(rear-front+M)%M
(M为能存入的最大元素个数)
千万别忘了求余哦,循环队列的精髓
我写的太水了,先这样吧,以后再来补充