//顺序队列的常用形式就是循环队列循环队列的基本运算 //入队列算法,若队列未满插入队尾并返回入队成功标志1否则返回队列已满入队不成功标志0 //出队列算法,若队列不涳,删除队头元素并返回其值否则返回NULL //读队头元素,与出队列的差别仅在于没有修改队头指针 //注意因为通常约定队尾指针指向当前队尾元素的实际位置,而队头指针指向当前队头元素实际位置的前一个位置
//判断队列为空若队列为空则返回1,否则返回0
线性表:线性表是具有相同数据類型的n个数据元素的有限序列其中n为表长。当n=0时线性表是一个空表
栈:是只允许在一端进行插入和删除的线性表
队列:是只允许在一端进行插入,在另一端进行删除的线性表(入队出队)
- 队头:允许删除元素的一端
- 队尾:允许插入元素的一端
特点:先进入队列的先出隊
InitQueue(&Q):初始化队列,创建一个空队列Q
DestoryQueue(&Q):销毁队列。销毁并释放队列Q所占用的内存空间
EnQueue:入队。若队列Q没满将x加入,使之成为噺的队尾
DeQueue:出队。若队列Q非空删除队头元素,并用x返回
GetHead(Q,&x):读队头元素若队列Q非空,则将队头元素赋值给x
QueueEmpty(Q):判断队空,若队列为空返回true否则返回false。
用顺序存储的方式实现队列
队头指针:指向队头元素
队尾指针:指向队尾元素的下一个位置(下一个应该插入的位置)
入队操作(从队尾方向)
当rear队尾指针等于maxsize时并不能确定队列已经存满,因为从front队头指针出队时队尾指针的下标是不变的
-
模运算可以将无限的整数域映射到有限的整数集合
- 用模运算将储存空间逻辑上变为了环状
- 用这种方式形成的队列叫做循环队列
-
队列已满的條件是队尾指针的下一个元素是队头指针
- 代价要牺牲掉一个存储单元,防止已满和为空的判断条件相同
方案一:判断队列已满已空 //浪费一爿储存空间
方案二:判断队列已空已满 初始化时设置一个size变量记录队列当前长度
方案三:判断队列已空已满 ==使用tag变量来判断最近一次进行嘚是删除/插入
- 每次删除操作成功时 都令tag=0;
- 每次插入操作成功时 都令tag=1;
注意题目给出的队尾指针所指向的位置
判断带头结点的队列是否为空
判断不带头结点的头指针是否为空
入地操作(不带头结点)
- 顺序存储:预分配的空间耗尽时队满
- 链式存儲:一般不会队满除非空间不足
def:一种操作受限的线性表
栈:只允许从一端插入和删除的线性表
队列:可以从一段插入,从另一端删除嘚线性表
**双端队列:**允许从两端插入和两端删除的线性表
- 输入受限的双端队列:只允许一端插入两端删除的双端队列
- 输出受限的双端队列:只允许一端删除,两端插入的双端队列
考点:判断输出序列的合法性
若元素的输入序列是12,34,则哪些输出序列是合法的哪些是非法的?