问题描述】根据循环队列的类型定义,完成循环队列的基本操作。主函数中测试队列。 【输入形式】一个整数m,表示入队的元素个数 【输出形式】第一行:输出队头元素 第二行:队列中元素依次出队以空格间隔 【样例输入】5 【样例输出】 1 1 3 5 7 9 【样例输入】0 【样例输出】 empty! 【样例说明】 【评分标准】
时间: 2023-08-04 08:07:07 浏览: 77
以下是循环队列的基本操作的代码实现,包括初始化队列、判断队列是否为空、判断队列是否已满、入队、出队、获取队头元素等:
```c++
#include <iostream>
using namespace std;
const int MAXSIZE = 5; // 定义循环队列的最大长度
// 循环队列的类型定义
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; // 队列已满,入队失败
} else {
Q.data[Q.rear] = x; // 将元素x放入队尾
Q.rear = (Q.rear + 1) % MAXSIZE; // 队尾指针加1
return true; // 入队成功
}
}
// 出队操作
bool DeQueue(CircularQueue& Q, int& x) {
if (IsEmpty(Q)) {
return false; // 队列为空,出队失败
} else {
x = Q.data[Q.front]; // 取出队头元素
Q.front = (Q.front + 1) % MAXSIZE; // 队头指针加1
return true; // 出队成功
}
}
// 获取队头元素
bool GetHead(CircularQueue Q, int& x) {
if (IsEmpty(Q)) {
return false; // 队列为空,获取队头元素失败
} else {
x = Q.data[Q.front]; // 取出队头元素
return true; // 获取队头元素成功
}
}
int main() {
CircularQueue Q;
InitQueue(Q);
int m;
cin >> m;
for (int i = 1; i <= m; i++) {
EnQueue(Q, 2 * i - 1); // 入队元素为奇数
}
int x;
if (GetHead(Q, x)) {
cout << x << endl; // 输出队头元素
} else {
cout << "empty!" << endl; // 队列为空
}
while (DeQueue(Q, x)) {
cout << x << " "; // 依次出队并输出元素
}
cout << endl;
return 0;
}
```
输入样例1:
```
5
```
输出样例1:
```
1
1 3 5 7 9
```
输入样例2:
```
0
```
输出样例2:
```
empty!
```
阅读全文