一、概念
(一)定义:
只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表。允许插入的一端为队尾,允许删除的一端为队头。
例如:队列 A=(a1,a2,a3,···,an)a1是队头元素,an是队尾元素。
在队尾插入元素称为入队;在队首删除元素称出队。
(二)逻辑结构
与线性表相同,仍为一对一关系。
(三)存储结构
顺序队或链队,不过循环顺序队最常见。
(四)运算规则
只能在队尾和队首运算,且访问结点时依照先进先出(FIFO)的原则。
二、队列的抽象数据类型定义
基本操作:建队列、判断队列是否为空、入队、出队、读队头元素值等
(1)初始化队列 InitQueue(&Q)
(2)入队 EnQueue(&Q,e)
(3)出队 DeQueue(&Q,&e)
(4)获取队头元素内容 GetHead(Q,&e)
(5)判断队列是否为空 QueueEmpty(Q)
(6)遍历队列 QueueTraverse(Q)
(7)获取队列长度 QueueLength(Q)
三、队列的表示和实现
队列的顺序存储结构
#define MAXQSIZE 100 //队列可能达到的最大长度
typedef struct
{
QElemType *base; //存储空间的基地址
int front; //头指针
int rear;