队列,先来先服务,先进先出
具有一定操作约束的线性表
只能在一端插入,而在另一端删除
操作集
- Queue CreatQueue(int MaxSize):生成长度为MaxSize的队列
- int IsFullQ(Queue Q,int MaxSize):判断队列Q是否已满
- void AddQ(Queue Q,ElemenType item):将数据元素item插入队列
- int IsEmptyQ(Queue Q):判断队列是否为空
- ElementType DeleteQ(Queue Q):将队投元素从队列中删除并返回
队列顺序存储实现
队列的顺序存储结构通常由一个一维数组和一个记录队列头元素位置的变量front以及一个记录队列尾元素的变量rear组成
#define MaxSize <最大元素个数>
struct QNode{
ElementType Data[MaxSize];
int rear;
int front;
};
typedef struct QNode *Queue;
环状队列
//入队列
void AddQ(Queue PtrQ,ElementType item){
if(PtrQ->rear+1) % MaxSize == PtrQ->front{
printf("队列满");
return ;
}
PtrQ->rear=(PtrQ->rear+1) % MaxSize;
PtrQ->Data[PtrQ->rear]=item;
//出队列
ElementType DeleteQ(Queue ptrQ){
if(PtrQ->front==PtrQ->reat){
printf("队列空");
return ERROR;
}
else{
PtrQ->front=(PtrQ->front+1)%MaxSize;
return PtrQ->Data[PtrQ->front];
}
}