3.3 队列
3.3.1 队列的基本概念
-
队列(Queue):队列是只允许在一端进行插入,在另一端进行删除的线性表,简称队
-
操作特性:FIFO
-
队头(Front):允许删除的一端
-
队尾(Rear):允许插入的一端
-
入队:向队列中插入元素
-
出队:从队列中删除元素
-
基本操作
- InitQueue(&Q):初始化队列,构造一个空队列
- DestroyQueue(&Q):销毁一个队列并释放队列所占用的存储空间
- EnQueue(&Q, x):入队,若队列未满,则将x加入,使之成为新队尾
- DeQueue(&Q, &x):出队,若队列非空,删除队头元素,并用x返回
- GetHead(Q, &x):若队列非空,获取队头元素并用x返回
3.4 队列的顺序存储结构
3.4.1 队列的顺序存储
-
队列的顺序实现:分配一块连续的存储单元存放队列的元素,并附设两个指针:队头指针(front)指向队头元素,队尾指针(rear)指向队尾元素的下一个位置
-
队列的顺序存储类型描述
#define MaxSize 50 typedef struct{ ElemType data[MaxSize]; int front,rear; }SqQueue;
-
初始状态/队空条件:Q.front == Q.rear == 0
void InitQueue(SqQueue &Q){ Q.front=Q.rear=0; }
-
入队操作:队不满时,先送值到队尾元素,队尾指针+1
bool EnQueue(SqQueue &Q, ElemType x){ // 这种判断是错误的 if(Q.rear==MaxSize) return false; Q.data[Q.rear]=x; Q.rear++; return true; }
-
出队操作:队非空时,取出队头元素,队头指针+1
bool DeQueue(SqQueue &Q, ElemType &x){ // 这种判断是错误的 if(Q.rear==Q.front) return false; x=Q.data[Q.front]; Q.front++;
-