什么是队列
具有一定操作约束的线性表。
队列的抽象数据类型描述
类型名称:队列
数据对象集:一个有0个或多个元素的有穷线性表。
操作集:生成空队列、判断队列是否已满、将数据元素插入队列、判断队列是否为空、删除队头元素并返回。
队列的顺序存储实现
1、结构体
#define MaxSize <存储数据元素的最大个数>
typedef struct QNode *Queue;
struct ANode{
ElementType Data[MaxSize];
int rear;
int front;
};
2、操作
(1)入队(循环队列)
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;
}
(2)出队(循环队列)
ElementType DeleteQ(Queue PtrQ){
if(PtrQ->front == PtrQ->rear){
printf("队列空");
return ERROR;
}else{
PtrQ->front=(PtrQ->front+1)%MaxSize;
return PtrQ->Data[PtrQ->front];
}
}
队列的链式存储实现
1、结构体
struct Node{
ElementType Data;
struct Node *Next;
};
struct QNode{
struct Node *rear;
struct Node *front;
};
typedef struct QNode *Queue;
Queue PtrQ;
2、操作
(1)出队
ElememtType DeleteQ(Queue PtrQ){
struct Node *FrontCell;
ElementType FrontElem;
if(PtrQ->front == NULL){
printf("队列空");
return ERROR;
}
FrontCell=PtrQ->front;
if(PtrQ->front == PtrQ->rear){
PtrQ->front=PtrQ->rear=NULL;
}else{
PtrQ->front=PtrQ->front->Next;
}
FrontElem=FrontCell->Data;
free(FrontCell);
return FrontElem;
}