typedef struct { ElemType data[MAXSIZE]; int front, rear; }SqQueue;
初始化
void InitQueue(SqQueue*& q) { q = (SqQueue*)malloc(sizeof(SqQueue)); q->front = -1; q->rear = -1; }
销毁
void DestroyQueue(SqQueue*& q) { free(q); }
判断队列是否为空
bool QueueEmpty(SqQueue* q) { return (q->front == q->rear); }
进队
bool enQueue(SqQueue*& q, ElemType e) { if (q->rear == MAXSIZE - 1) return false; q->rear++; q->data[q->rear] = e; return true; }
出队
bool deQueue(SqQueue*& q, ElemType& e) { if (q->front == q->rear) return false; q->front++; e = q->data[q->front]; return true; }
环形队列
环形队列①
typedef struct { ElemType data[MAXSIZE]; int front, rear; }SqQueue1;
初始化
void InitQueue1(SqQueue1*& q) { q = (SqQueue1*)malloc(sizeof(SqQueue1)); q->front = q->rear = 0; }
销毁
void DestroyQueue1(SqQueue1*& q) { free(q); }
判断是否为空
bool QueueEmpty(SqQueue1* q) { return (q->front == q->rear); }
进队
bool enQueue1(SqQueue1*& q, ElemType e) { if ((q->rear + 1) % MAXSIZE == q->front) return false; q->rear = (q->rear + 1) % MAXSIZE; q->data[q->rear] = e; return true; }
出队
bool delQueue(SqQueue1*& q, ElemType& e) { if (q->rear == q->front) return false; q->front = (q->front + 1) % MAXSIZE; e = q->data[q->front]; return true; }
环形队列②
typedef struct { ElemType data[MAXSIZE]; int front; int count; }SqQueue2;
初始化
void InitQueue2(SqQueue2*& qu) { qu = (SqQueue2*)malloc(sizeof(SqQueue2)); qu->front = 0; qu->count = 0; }
判断队列是否为空
bool QueueEmpty2(SqQueue2* qu) { return (qu->count == 0); }
进队
bool enQueue2(SqQueue2*& qu, ElemType e) { int rear; if (qu->count == MAXSIZE) return false; rear = (qu->front + qu->count) % MAXSIZE; rear = (rear + 1) % MAXSIZE; qu->data[rear] = e; qu->count--; return true; }
出队
bool delQueue(SqQueue2*& qu, ElemType& e) { if (qu->count == 0) return false; qu->front = (qu->front + 1) % MAXSIZE; e = qu->data[qu->front]; qu->count--; return true; }
原文:https://www.cnblogs.com/KIROsola/p/11350246.html