一. 队列的定义:(FIFO)
队列的顺序实现
//定义一个队列
#define MaxSize 10
typedef struct {
Elemtype data[MaxSize]; //静态数组存放队列元素
int front,rear; //定义队头队尾指针
}SqQueue;
//初始化队列
void InitQueue(SqQueue &Q){
Q.front=Q.rear=0;
} //队头队尾指针指向0
//判断一个队列是否为空
bool EmptyQueue(SqQueue Q){
return Q.front==Q.rear; //队空条件
}
二.入队操作:
循环队列:
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.front ==Q.rear)
return false;
x=Q.data[Q.front];
Q.front =(Q.front+1)%MaxSize;
return true;
}
四.查找:
//获得队头元素的值,用x返回。
bool GetHead(SqQueue Q,ElemType &x){
if(Q.front==Q.rear)
return false;
x=Q.data[Q.front];
return true;
}
五.队列元素个数:
(rear+MaxSize-front)%MaxSize //记住即可
总结:队列这里循环队列比较复杂,需要多加练习。