队列常见的基本操作
InitQueue(&Q) //初始化队列,构造一个空队列Q
QueueEmpty(Q) //判队列空,若空返回true,不空返回false
EnQueue(&Q,x) //入队,若Q未满,将x加入,使之成为新的队尾
DeQueue(&Q,&x) //出队,若Q非空,删除队头元素,并用x返回
GetHead(Q,&x) //读队头元素,若Q非空,将队头元素赋值给x
//栈和队列是受限制的线性表,所以不是任何对线性表的操作都适用于栈和队列,
//比如,不可以随便读取栈和队列中间的某个元素
队列的顺序存储类型和描述为
#define MaxSize 50
typedef struct{
ElemType data[MaxSize]; //用静态数组存放队列元素,系统自动分配连续存储空间
int front ,rear;
}SeQueue;
- 初始化
void InitQueue(SqQueue &Q){
Q.rear = Q.front = 0;
}
- 判队空
bool QueueEmpty(SqQueue Q){
if(Q.rear == Q.front) returun true;
else return false;
}
- 入队
bool EnQueue(SqQueue &Q,ElemType x){
if((Q.rear+1)%MaxSize == Q.front) return false;
Q.data[Q.rear] = x;
Q.rear = (Q.rear+1)%MaxSize;
return true;
}
- 出队
bool DeQueue(SqQueue &Q,ElemType &x){
if(Q.rear == Q.front) return false;
x = Q.data[Q.front];
Q.front = (Q.front+1)%MaxSize;
return true;
}