/* * 循环队列基本操作。 * 少用一个元素空间,约定以“队列头指针在队列尾指针的下一个位置”作为队列满的标志。 * “队列头指针等于队列尾指针”作为队列空的标志。 */ #include <stdio.h> #include <stdbool.h> #include <malloc.h> #define MAXQSIZE 100 typedef char ElemType; typedef struct { ElemType *base; int front; int rear; } Queue; bool InitQueue(Queue *queue); int QueueLength(Queue queue); bool EnQueue(Queue *queue, ElemType e); bool DeQueue(Queue *queue, ElemType *e); int main() { Queue queue; ElemType elem[26],temp; int i,length; InitQueue(&queue); for (i = 0; i < 26; i++) { elem[i] = 'A'+i; EnQueue(&queue, elem[i]); } length = QueueLength(queue); printf("length:%d\n", length); for (i = 0; i < length; i++) { DeQueue(&queue, &temp); putchar(temp); } return 0; } //构造空队列。 bool InitQueue(Queue *queue) { queue->base = (ElemType*)malloc(sizeof(ElemType)*MAXQSIZE); if (!queue->base) return false; queue->front = queue->rear = 0; return true; } //求队列长度。 int QueueLength(Queue queue) { return (queue.rear - queue.front + MAXQSIZE) % MAXQSIZE; } //插入元素e为队列的队尾元素。 bool EnQueue(Queue *queue, ElemType e) { if ((queue->rear + 1) % MAXQSIZE == queue->front) //队列满 return false; queue->base[queue->rear] = e; queue->rear = (queue->rear + 1) % MAXQSIZE; return true; } //删除队列的队头元素,用e返回其值。 bool DeQueue(Queue *queue, ElemType *e) { if (queue->front == queue->rear) //队列空 return false; *e = queue->base[queue->front]; queue->front = (queue->front + 1) % MAXQSIZE; return true; }
循环队列基本操作
原文作者:Andy Cheung
原文地址: https://www.cnblogs.com/Camilo/p/3896768.html
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://www.cnblogs.com/Camilo/p/3896768.html
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。