#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW 3
#define MAXSIZE 5
typedef int Status;
typedef int Element;
typedef struct {
Element* base;
int front;
int rear;
}SqQueue;
//初始化队列
Status InitQueue(SqQueue& Q) {
//base指针指向数组首地址
Q.base = (Element*)malloc(MAXSIZE * sizeof(Element));
//判断申请内存是否成功
if (!Q.base)exit(OVERFLOW);
//两个下标指向第一个位置
Q.front = Q.rear = 0;
return OK;
}
//计算队列长度,重点公式(Q.rear - Q.front + MAXSIZE) % MAXSIZE
int QueueLength(SqQueue Q) {
return (Q.rear - Q.front + MAXSIZE) % MAXSIZE;
}
//插入元素
Status EnQueue(SqQueue& Q, Element e) {
//判断队列是否满了
if ((Q.rear + 1) % MAXSIZE == Q.front)return ERROR;
Q.base[Q.rear] = e;
Q.rear = (Q.rear + 1) % MAXSIZE;
return OK;
}
//删除队列元素
Status DeQueue(SqQueue& Q, Element& e) {
//判断队列是否为空
if (Q.front == Q.rear)return ERROR;
e = Q.base[Q.front];
Q.front = (Q.front + 1) % MAXSIZE;
return OK;
}
int main() {
SqQueue Q;
InitQueue(Q);
printf("Length:%d\n", QueueLength(Q));
EnQueue(Q, 5);
EnQueue(Q, 6);
EnQueue(Q, 7);
EnQueue(Q, 8);
printf("Length:%d\n", QueueLength(Q));
EnQueue(Q, 5);
EnQueue(Q, 6);
EnQueue(Q, 7);
printf("Length:%d\n", QueueLength(Q));
Element e;
DeQueue(Q,e);
printf("DeQueueElement:%d\n",e);
printf("Length:%d\n", QueueLength(Q));
DeQueue(Q, e);
printf("DeQueueElement:%d\n", e);
printf("Length:%d\n", QueueLength(Q));
DeQueue(Q, e);
printf("DeQueueElement:%d\n", e);
printf("Length:%d\n", QueueLength(Q));
DeQueue(Q, e);
printf("DeQueueElement:%d\n", e);
printf("Length:%d\n", QueueLength(Q));
DeQueue(Q, e);
printf("DeQueueElement:%d\n", e);
printf("Length:%d\n", QueueLength(Q));
EnQueue(Q, 5);
EnQueue(Q, 8);
printf("Length:%d\n", QueueLength(Q));
return 0;
}
C语言数据结构-循环队列(顺序存储-数组形式)
于 2024-07-03 22:25:13 首次发布