循环队列
有问题可以在评论区讨论
#include<stdio.h>
#define _CRT_SECURE_NO_WARNINGS
#define MaxSize 10
typedef int ElemType;
typedef struct {
ElemType data[MaxSize];
int front, rear;
}SqQueue;
//初始化队列
void InitQueue(SqQueue&);
//判断队列是否为空
bool QueueEmpty(SqQueue);
//判断队列是否满
bool QueueFull(SqQueue);
//入队操作
bool EnQueueu(SqQueue&, ElemType);
//出队操作
bool DeQueue(SqQueue&, ElemType&);
//获取队顶元素
bool getHead(SqQueue, ElemType&);
//获取队列长度
int Length(SqQueue);
//打印队列
void Treaverse(SqQueue);
int main(void) {
SqQueue Q;
InitQueue(Q);
ElemType x;
for (int i = 1; i <= 20; i++) {
if (!EnQueueu(Q, i) || !EnQueueu(Q, ++i)) {
printf("队列满了!\n");
break;
}
Treaverse(Q);
if (!DeQueue(Q,x)) {
break;
}
}
Treaverse(Q);
printf("队列长度:%d", Length(Q));
return 0;
}
void InitQueue(SqQueue& Q) {
Q.front = Q.rear = 0;
}
bool QueueEmpty(SqQueue Q) {
return Q.rear == Q.front;
}
bool QueueFull(SqQueue Q) {
return (Q.rear + 1) % MaxSize == Q.front;
}
bool EnQueueu(SqQueue& Q, ElemType x) {
if (QueueFull(Q)) {
return false;
}
Q.data[Q.rear] = x;
Q.rear = (Q.rear + 1) % MaxSize;
return true;
}
bool DeQueue(SqQueue& Q, ElemType& x) {
if (QueueEmpty(Q)) {
return false;
}
x = Q.data[Q.front];
Q.front = (Q.front + 1) % MaxSize;
return true;
}
bool getHead(SqQueue Q, ElemType& x) {
if (QueueEmpty(Q)) {
return false;
}
x = Q.data[Q.front];
return true;
}
int Length(SqQueue Q) {
return (MaxSize + Q.rear - Q.front) % MaxSize;
}
void Treaverse(SqQueue Q) {
int length = Length(Q);
for (int i = 0; i < length; i++) {
printf("%d\t", Q.data[(Q.front + i) % MaxSize]);
}
printf("\n");
}