一 循环队列的操作集合
循环队列的存储结构
typedef struct QNode *PtrToQNode;
struct QNode{
ElementType *Data;
int front;
int rear;
int MaxSize;
};
typedef PtrToQNode Queue;
队列的创建
Queue CreateQueue (int MaxSize)
{
Queue Q=(Queue)malloc(sizeof(struct QNode));
Q->Data=(ElementType*)malloc(MaxSize*sizeof(ElementType));
Q->front=0;
Q->rear=0;
Q->MaxSize=MaxSize;
}
判断队列是否满的操作
bool Isfull(Queue Q)
{
if((Q->rear+1)%(Q->MaxSize)==Q->front) //在存储时,空出一个存储空间,由front指向。循环队列,且数组的下标从0开始。
{
return true;
}
else return false;
}
入队操作
bool AddQ(Queue Q,ElementType X)
{
if(Isfull(Q)){
printf("队列满了\n");
return false;
}
Q->rear=(Q->rear+1)%Q->MaxSize;
Q->Data[Q->rear]=X;
return true;
}
出队操作
ElementType DeletQ(Queue Q)
{
if(Q->fort==Q->rear) return -1;
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;
}
typedef PtrToQNode Queue;
队列的创建(不·带头结点)
Queue CreateQueue (Queue Q)
{
Q->front=(Position) malloc(sizeof (struct Node));
Q->rear=(Position) malloc(sizeof (struct Node));
Q->front=NULL;
Q->rear=NULL;
return Q;
}
入队操作(要考虑是空的队列的情况)
bool AddQ(Queue Q,ElementType X)
{
Position temp=(Position) malloc(sizeof(struct Node));
temp->Data=x;
temp->Next=NULL;
if(Q->rear==NULL)
{
Q->front=temp;
Q->rear=temp;
}
else {
Q->rear->Next=temp;
Q->rear=temp;
}
return true;
}
出队操作(要考虑只有一个节点的情况)
ElementType Delet(Queue Q)
{
Position temp;
if(Q->front==NULL)
{
printf("队列空");
return -1 ;
}
else{
temp=Q->front;
if(Q->front==Q->rear)
{
Q->front=Q->rear=NULL;
}
else {
Q->front=Q->front->Next;
int num;
num=temp->Data;
free(temp);
return num;
}
}