编写程序,实现队列的基本运算:入队、出队、输出队、取队头、取队尾、求队长、清空队,要求采用顺序循环队实现。C++
时间: 2023-10-20 14:21:55 浏览: 72
数据结构与算法C++实现 循环顺序队列的初始化,求长度,入队,出队
5星 · 资源好评率100%
以下是基于顺序循环队列实现的队列基本运算的示例代码:
```c++
#include <iostream>
using namespace std;
const int MAXSIZE = 100; // 队列最大容量
class SeqQueue {
private:
int* data; // 存储队列元素的数组
int front; // 队头指针
int rear; // 队尾指针
int length; // 队列长度
public:
SeqQueue() { // 构造函数
data = new int[MAXSIZE]; // 动态分配数组空间
front = rear = 0; // 初始化队头队尾指针
length = 0; // 初始化队列长度
}
~SeqQueue() { // 析构函数
delete[] data; // 释放数组空间
}
bool isEmpty() { // 判断队列是否为空
return length == 0;
}
bool isFull() { // 判断队列是否已满
return length == MAXSIZE;
}
void enqueue(int x) { // 入队操作
if (isFull()) {
cout << "Queue is full!" << endl;
return;
}
data[rear] = x; // 将元素添加到队尾
rear = (rear + 1) % MAXSIZE; // 更新队尾指针
length++; // 更新队列长度
}
int dequeue() { // 出队操作
if (isEmpty()) {
cout << "Queue is empty!" << endl;
return -1;
}
int x = data[front]; // 记录队头元素
front = (front + 1) % MAXSIZE; // 更新队头指针
length--; // 更新队列长度
return x;
}
void printQueue() { // 输出队列元素
if (isEmpty()) {
cout << "Queue is empty!" << endl;
return;
}
cout << "Queue: ";
int i = front;
while (i != rear) {
cout << data[i] << " ";
i = (i + 1) % MAXSIZE;
}
cout << endl;
}
int getFront() { // 取队头元素
if (isEmpty()) {
cout << "Queue is empty!" << endl;
return -1;
}
return data[front];
}
int getRear() { // 取队尾元素
if (isEmpty()) {
cout << "Queue is empty!" << endl;
return -1;
}
return data[(rear - 1 + MAXSIZE) % MAXSIZE];
}
int getLength() { // 求队列长度
return length;
}
void clearQueue() { // 清空队列
front = rear = length = 0;
}
};
int main() {
SeqQueue q; // 创建队列对象
q.enqueue(1);
q.enqueue(2);
q.enqueue(3);
q.enqueue(4);
q.printQueue(); // 队列: 1 2 3 4
cout << "Front: " << q.getFront() << endl; // Front: 1
cout << "Rear: " << q.getRear() << endl; // Rear: 4
cout << "Length: " << q.getLength() << endl; // Length: 4
q.dequeue();
q.dequeue();
q.printQueue(); // 队列: 3 4
cout << "Front: " << q.getFront() << endl; // Front: 3
cout << "Rear: " << q.getRear() << endl; // Rear: 4
cout << "Length: " << q.getLength() << endl; // Length: 2
q.clearQueue();
q.printQueue(); // 队列:
cout << "Front: " << q.getFront() << endl; // Front: -1
cout << "Rear: " << q.getRear() << endl; // Rear: -1
cout << "Length: " << q.getLength() << endl; // Length: 0
return 0;
}
```
以上代码中,`SeqQueue` 类封装了队列的基本运算,其中 `data` 数组存储队列元素,`front` 和 `rear` 指针分别指向队头和队尾,`length` 记录队列长度。在队列的入队操作中,如果队列已满,则提示队列已满;在队列的出队操作中,如果队列为空,则提示队列为空。在取队头和队尾元素的操作中,如果队列为空,则返回 -1。在清空队列操作中,将队头、队尾和队列长度都设为 0。在主函数中,演示了如何使用 `SeqQueue` 类创建队列对象并进行基本运算。
阅读全文