队列是只允许再一端进行插入,而在另一端进行删除的线性表
队头(front):允许删除的一端,又称为队首
队尾(rear):允许插入的一段
先进入队列的元素必然先离开队列(先进先出)与栈相反
队尾指针指向队尾元素的下一个位置(防止假溢出)
队空条件:front == rear
队满条件:(rear+1) % MaxSize == front
进队:rear = (rear + 1) % MaxSize
出队:front = (front + 1) % MaxSize
队列元素个数:(rear - front + MaxSize) % MaxSize
#include<iostream>
const int MaxSize = 50;
typedef int Elemtype;
typedef struct {
Elemtype data[MaxSize]; //存放队列元素
//出队:front=(front+1) % MaxSize
int front; //队头指针
//入队:rear=(rear+1) % MaxSize
int rear; //队尾指针
}SqQueue;
//入队
bool EnQueue(SqQueue &Q, Elemtype e) {
if ((Q.rear + 1) % MaxSize == Q.front) //队列已满
return false;
Q.data[Q.rear] = e;
Q.rear = (Q.rear + 1) % MaxSize;
return true;
}
//出队
bool DeQueue(SqQueue &Q, Elemtype &e) {
if (Q.rear==Q.front) //队列为空
return false;
e = Q.data[Q.front];
Q.front = (Q.front + 1) % MaxSize;
return true;
}