队列的抽象数据类型定义为:
类型名称:队列(Queue)
数据对象集:一个有0个或多个元素的有穷线性表
队列的实现
typedef int Position;
typedef struct QNode *PtrToQNode;
struct QNode
{
ElementType *Data;
Position Front,Rear;
int MaxSize;
};
typedef PtrToQNode Queue;
操作集
1.循环队列的创建
Queue CreateQueue(int MaxSize)
{
Queue Q=(Queue)malloc(sizeof(struct QNode));
Q->Data=(ElementType*)malloc(MaxSize*sizeof(ElementType));
Q->Front=Q->Rear=0;
Q->MaxSize=MaxSize;
return Q;
}
2.是否已满+入队
bool IsFull(Queue Q)
{
return((Q->Rear+1)&Q->MaxSize==Q->Front); /*后面半段意义不明*/
}
bool AddQ(Queue Q,ElementType X)
{
if(IsFull(Q))
{
printf("队列满");
return false;
}
else
{
Q->Rear=(Q->Rear+1)&Q->MaxSize;
Q->Data[Q->Rear]=X;
return true;
}
}
3.是否已空+出队
bool IsEmpty(Queue Q)
{
return(Q->Front==Q->Rear);
}
ElementType DeleteQ(Queue Q)
{
if(IsEmpty(Q))
{
printf("队列空");
return ERROR;
}
else
{
Q->Front=(Q->Front+1)%Q->MaxSize;
return Q->Data[Q->Front];
}
}
队列的链式存储实现
typedef struct Node *PtrToNode;
struct Node
{
ElementType Data;
PtrToNode Next;
};
typedef PtrToNode Position; /*定义结点的地址*/
typedef struct QNode *PtrToQNode;
struct QNode
{
Position Front,Rear;
int MaxSize;
};
typedef PtrToQNode Queue;