C++:编程实现如下功能: (1)根据输入的队列长度n和各元素值建立一个循环顺序表表示的队列(循环队列),并输出队列中各元素值。 (2)将数据元素e入队,并输出入队后的队列中各元素值。 (3)将循环队列的队首元素出队,并输出出队元素的值和出队后队列中各元素值。
时间: 2024-02-09 16:08:42 浏览: 112
以下是C++语言的代码实现:
```c++
#include <iostream>
using namespace std;
#define MAXSIZE 100 // 循环队列的最大长度
typedef struct {
int *data; // 动态分配存储空间
int front; // 队头指针
int rear; // 队尾指针
} SqQueue;
// 初始化循环队列
void InitQueue(SqQueue *Q, int n) {
Q->data = new int[n];
Q->front = Q->rear = 0; // 初始时队头和队尾指针都指向0
}
// 判断循环队列是否为空
bool QueueEmpty(SqQueue Q) {
return Q.front == Q.rear; // 队头指针和队尾指针相等时为空
}
// 判断循环队列是否已满
bool QueueFull(SqQueue Q) {
return (Q.rear + 1) % MAXSIZE == Q.front; // 队尾指针加1取模后等于队头指针时已满
}
// 入队操作
void EnQueue(SqQueue *Q, int e) {
if (QueueFull(*Q)) {
cout << "Queue is full" << endl;
return;
}
Q->data[Q->rear] = e; // 将新元素插入队尾
Q->rear = (Q->rear + 1) % MAXSIZE; // 队尾指针加1取模
}
// 出队操作
void DeQueue(SqQueue *Q, int &e) {
if (QueueEmpty(*Q)) {
cout << "Queue is empty" << endl;
return;
}
e = Q->data[Q->front]; // 取出队头元素
Q->front = (Q->front + 1) % MAXSIZE; // 队头指针加1取模
}
// 输出循环队列中各元素值
void PrintQueue(SqQueue Q) {
if (QueueEmpty(Q)) {
cout << "Queue is empty" << endl;
return;
}
cout << "Queue elements: ";
int i;
for (i = Q.front; i != Q.rear; i = (i + 1) % MAXSIZE) {
cout << Q.data[i] << " ";
}
cout << endl;
}
int main() {
SqQueue Q;
int n, e;
cout << "Enter queue length: ";
cin >> n;
InitQueue(&Q, n);
cout << "Enter queue elements:" << endl;
int i;
for (i = 0; i < n; i++) {
cin >> e;
EnQueue(&Q, e);
}
PrintQueue(Q);
cout << "Enter an element to enqueue: ";
cin >> e;
EnQueue(&Q, e);
PrintQueue(Q);
DeQueue(&Q, e);
cout << "Dequeued element: " << e << endl;
PrintQueue(Q);
return 0;
}
```
运行程序后,按照提示依次输入队列长度和各元素值,然后输入要入队的元素,最后执行出队操作。程序会输出队列中各元素值和每次操作后的队列情况。
阅读全文