【问题描述】根据循环队列的类型定义,完成循环队列的基本操作。主函数中测试队列。 【输入形式】一个整数m,表示入队的元素个数 【输出形式】第一行:输出队头元素 第二行:队列中元素依次出队以空格间隔 【样例输入】5 【样例输出】 1 1 3 5 7 9 【样例输入】0 【样例输出】 empty!
时间: 2023-11-30 11:03:04 浏览: 66
循环队列是一种线性数据结构,它可以在队列的两端进行插入和删除操作,因此可以用来实现“先进先出”的队列。下面是循环队列的基本操作实现代码,您可以参考一下:
```c++
#include <iostream>
using namespace std;
const int MAXSIZE = 100; // 循环队列最大长度
// 循环队列的类型定义
typedef struct {
int data[MAXSIZE]; // 队列元素
int front; // 队头指针
int rear; // 队尾指针
} CircularQueue;
// 初始化循环队列
void InitQueue(CircularQueue &Q) {
Q.front = Q.rear = 0;
}
// 判断循环队列是否为空
bool IsEmpty(CircularQueue Q) {
return Q.front == Q.rear;
}
// 判断循环队列是否已满
bool IsFull(CircularQueue Q) {
return (Q.rear + 1) % MAXSIZE == Q.front;
}
// 元素入队
bool EnQueue(CircularQueue &Q, int x) {
if (IsFull(Q)) {
return false;
}
Q.data[Q.rear] = x;
Q.rear = (Q.rear + 1) % MAXSIZE; // 队尾指针加1,取模是为了实现循环
return true;
}
// 元素出队
bool DeQueue(CircularQueue &Q, int &x) {
if (IsEmpty(Q)) {
return false;
}
x = Q.data[Q.front];
Q.front = (Q.front + 1) % MAXSIZE; // 队头指针加1,取模是为了实现循环
return true;
}
int main() {
CircularQueue Q;
int m;
cin >> m;
InitQueue(Q);
for (int i = 1; i <= m; i++) {
EnQueue(Q, i);
}
if (!IsEmpty(Q)) {
int x;
DeQueue(Q, x);
cout << x << endl;
while (!IsEmpty(Q)) {
DeQueue(Q, x);
cout << x << " ";
}
cout << endl;
} else {
cout << "empty!" << endl;
}
return 0;
}
```
程序中,我们首先定义了一个循环队列的结构体类型 CircularQueue,包含队列元素和队头、队尾指针。然后,我们实现了初始化队列、判断队列是否为空、判断队列是否已满、元素入队、元素出队等基本操作,最后在主函数中进行测试。
阅读全文