九、队列
(一)、逻辑结构
队列简称队,它也是一种操作受限的线性表,其限制为仅允许在表的一端进行插入操作,而在表的另一端进行删除操作。队列也称为先进先出表,即FIFO(不同于栈,出队的顺序只有一种)。
队列抽象数据类型=逻辑结构+基本运算(运算描述)
队列的几种基本运算如下:
(二)、存储结构
1.顺序队
采用顺序存储结构的队列称为顺序队。(顺序队类型SqQueue)
队空的条件:q->frnot==q->rear。(初始时设置q->rear=q->frnot=-1)
队满的条件:q->rear==MaxSize-1(data数组的最大下标)。
元素e的进队操作:先将rear增1,然后将元素e放在 data 数组的 rear位置
出队操作:先将front增1,然后取出 data 数组中 front 位置的元素。
因为队满条件设置不合理导致队满条件成立而队列中仍然有空位置的情况称为假溢出
解决的方法是把data数组的前端和后端连接起来,形成一个环形数组,即把存储队列元素的数组从逻辑上看成一个环,称为环形队列或者循环队列
2.链队
采用链式存储结构的队列称为链队。
队空的条件:q->rear==NULL(也可以为q->front==NULL)。
队满的条件:不考虑。
元素e的进队操作:新建一个结点存放元素e(由p指向它),将结点p插入作为尾结点。
出队操作:取出队首结点(rear所指结点的后继结点)的data值并将其删除。