队列的概念
队列:限定所有的插入操作在表的一端进行,而删除操作在表的另一端进行的线性表。
允许进行插入操作的一端称为队尾(rear),允许进行删除操作的一端称为队头(front)。
特点:先进先出
队列的基本操作
- 队列初始化:InitQueue(q)
初始化一个空队; - 入队操作:InQueue(q,x)
对已存在的队列q,插入一个元素×到队尾。操作成功,返回值为TRUE,否则返回值为FALSE; - 出队操作:OutQueue(q,x)
删除队首元素,并返回其值。操作成功,返回值为TRUE; - 读队头元素:FrontQueue(q,x)
读队头元素,并返回其值,队不变。操作成功,返回值为TRUE,否则返回值为FALSE。 - 判队空操作:EmptyQueue(q)
若q为空队则返回为1,否则返回为0。
顺序结构
用一个一维数组来实现。
一开始队头和队尾都指向最下面,队列为空,队头队尾指针为-1,;一个元素入队,尾指针+1,
队头指针指示队列中队头元素的前面一个位;
队尾指针指示队列中队尾元素位置。
头指针+1,A出队
循环结构(常用)
如何判断循环队列的队空和队满?
- 少用一个存储单元
队空条件:rear = front
队满条件:(rear+1)% maxsize = front - 设置一个标志
队空条件:rear=front && tag=0
队满条件:rear=front && tag=1 - 设置一个计数器
队空条件:count=0
队满条件:count=maxsize
循环队列需要事先给队列分配一个比较大的存储空间。
链队列
链表来实现线性表的存储。