在引用循环队列前,我们需要了解队列是如何线性实现的。
以下是实现的代码:
#include <stdio.h>#include <malloc.h>#define MAXSIZE 100 //最大队列长度#define OK 1#define ERROR 0typedef int ElemType;typedef int Status;typedef struct { ElemType *base; //队列空间 int front; //队头指针 int rear; //队尾指针,若队尾不为空,则指向队尾元素的下一个位置}SqQueue;//初始化循环队列Status initQueue(SqQueue &Q) { Q.base = (ElemType *) malloc(MAXSIZE * sizeof(ElemType)); //申请空间 Q.front = Q.rear = 0; //队空 return OK;}//入队Status enQueue(SqQueue &Q, ElemType e) { if ((Q.rear + 1) % MAXSIZE == Q.front) return ERROR; //队满,无法添加 Q.base[Q.rear] = e; //插入元素 Q.rear = (Q.rear + 1) % MAXSIZE; //队尾指针+1 return OK;}//出队Status deQueue(SqQueue &Q, ElemType &e) { if (Q.front == Q.rear) return ERROR; //队空,无法删除 e = Q.base[Q.front]; Q.front = (Q.front + 1) % MAXSIZE; //队头指针+1 return OK;}//返回队列长度Status length(SqQueue &Q) { return (Q.rear - Q.front + MAXSIZE) % MAXSIZE; }
联系客服