循环队列的存储结构
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 5 //注意这里是没有分号的,有会报错
typedef int ElemType;
typedef struct {
ElemType data[MaxSize]; //存储MaxSize-1个元素 空出来一个元素,用于判空
int front, rear; //队列头 队列尾
}SqQueue;
循环队列的初始化 InitQueue(SqQueue& Q)
// 循环队列的初始化
void InitQueue(SqQueue& Q) {
Q.rear = Q.front = 0;
}
循环队列判空 isEmpty(SqQueue Q)
bool isEmpty(SqQueue Q) {
if (Q.front == Q.rear) return true;
else return false;
}
循环队列 入队 EnQueue(SqQueue& Q, ElemType x)
// 入队
bool EnQueue(SqQueue& Q, ElemType x) {
if ((Q.rear + 1) % MaxSize == Q.front) return false;
Q.data[Q.rear] = x;
Q.rear = (Q.rear + 1) % MaxSize;
return true;
}
循环队列出队 DeQueue(SqQueue& Q, ElemType& x)
// 出队
bool DeQueue(SqQueue& Q, ElemType& x) {
if (isEmpty(Q)) return false;
x = Q.data[Q.front];
Q.front = (Q.front + 1) % MaxSize;
return true;
}
循环队列 待出队元素 Getfront(SqQueue& Q, ElemType& x)
// 待出队元素
bool Getfront(SqQueue& Q, ElemType& x) {
if (isEmpty(Q)) return false;
x = Q.data[Q.front];
return true;
}
遍历队列元素 printQueue(SqQueue Q)
// 遍历队列
void printQueue(SqQueue Q) {
printf("此时队列元素为:");
while (Q.rear != Q.front)
{
printf("%d ", Q.data[Q.front]);
Q.front = (Q.front + 1) % MaxSize;
}
printf("\n");
}
测试代码
void test_Queue() {
SqQueue Q;
ElemType element;//存储出队元素
bool ret;
InitQueue(Q); // 初始化循环队列
printf("队列容量为: %d\n", MaxSize - 1);
for (int i = 0; i < MaxSize - 1; i++)
{
printf("请输入第%d个元素: ", i + 1);
scanf_s("%d", &element);
EnQueue(Q, element);
}
printf("队列建立成功\n\n");
ret = DeQueue(Q, element);
if (ret) printf("出队元素为:%d\n", element);
ret = Getfront(Q, element);
printQueue(Q);
if (ret) printf("此时待出队元素为:%d\n", element);
}
测试截图
