队列的抽象数据类型描述
队列(Queue):具有一定操作约束的线性表
插入和删除操作:只能在一端插入,在另一端删除
先来先服务
先进先出:FIFE
类型名称:队列(Queue)
数据对象集:一个有0个或多个元素的又穷线性表
操作集:长度为MaxSize的队列Q∈Queue,队列元素item∈ElementType。
队列的链式存储实现
#define MaxSize<储存数据元素的最大个数>
struct QNode {
ElementType Data[ MaxSize ];
int rear;
int front;
};
typedef struct QNode *Queue;
入队列(Add Q)
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;
}
出队列(DeleteQ)
ElementType DeleteQ ( Queue PtrQ)
{
if ( PtrQ->front == PtrQ->rear ) {
printf(“队列空");
return ERROR;
}else {
PtrQ->front= (PtrQ->front+1)% MaxSize;
return PtrQ->Data[PtrQ->front];
}
}
队列的顺序存储实现
struct Node{
ElementType Data;
struct Node*Next;
};
struct QNode{ /*链队列结构*/
struct Node*rear;指向队尾结点*/
struct Node*front;/*指向队头结点*/
};
typedef struct QNode*Queue;
Queue PtrQ;
不带头节点的链式队列出队操作
ElementType 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;
}