队列没有元素是 Front Rear指向NULL
只有一个元素时 都指向那一个元素 因为既是第一个元素也是最后一个元素 即队头队尾
Front指向第一个元素 Rear指向最后一个元素
#include <stdlib.h> #include <stdio.h> #include <stdbool.h> #include <math.h> /** 循环队列的链表实现 */ #define ERROR -1 #define ElementType int typedef struct Node *PtrToNode; struct Node{ // 队列中的节点 ElementType Data; PtrToNode Next; }; typedef PtrToNode Position; struct QNode{ Position Front, Rear; int Size; // 队列大小 }; typedef struct QNode *Queue; bool IsEmpty(Queue Q){ return (Q->Front == NULL); } Queue CreateQueue(void){ Queue Q = (Queue)malloc(sizeof(struct QNode)); Q->Front = Q->Rear = NULL; Q->Size = 0; return Q; } void AddQ(Queue Q,ElementType X){ PtrToNode p = (PtrToNode)malloc(sizeof(struct Node)); p->Data = X; p->Next = NULL; if(IsEmpty(Q)){ Q->Front = p; Q->Rear = p; }else{ Q->Rear->Next = p; Q->Rear = p; } Q->Size++; } ElementType DeleteQ(Queue Q){ if(IsEmpty(Q)){ printf("The Queue is Empty\n"); return ERROR; } Position p = Q->Front; ElementType elem = p->Data; if(Q->Size == 1){ Q->Rear = Q->Front = NULL; free(p); Q->Size--; return elem; }else{ Q->Front = p->Next; free(p); Q->Size--; return elem; } } int main(){ Queue q = CreateQueue(); AddQ(q, 0); AddQ(q, 1); int a; a = DeleteQ(q); printf("a = %d\n",a); AddQ(q, 2); a = DeleteQ(q); printf("a = %d\n",a); a = DeleteQ(q); printf("a = %d\n",a); a = DeleteQ(q); printf("a = %d\n",a); return 0; }
标签:Queue,return,struct,队列,链表,实现,Front,Rear,Size From: https://www.cnblogs.com/xinrenbool/p/16887118.html