设计一个C++程序实现在顺序队中实现队列的基本运算
时间: 2024-11-09 13:31:09 浏览: 22
设计一个C++程序实现顺序队列(也称为线性队列),我们需要创建一个包含队头和队尾指针的数据结构,并提供一些基本操作,如入队(enqueue)、出队(dequeue)以及查看队列是否为空(is_empty)和获取队列长度(get_size)。以下是简化的顺序队列实现:
```cpp
#include <iostream>
template<typename T>
class Queue {
private:
T* items; // 存储元素的数组
int front; // 队首位置
int rear; // 队尾位置
public:
// 构造函数
Queue(int size) : items(new T[size]), front(0), rear(size - 1) {}
// 插入元素到队尾
void enqueue(T value) {
if (rear == front) {
std::cout << "Queue is full.\n";
return;
}
rear = (rear + 1) % size; // 使用循环索引来避免数组越界
items[rear] = value;
}
// 从队首删除并返回元素
T dequeue() {
if (front == rear) {
std::cout << "Queue is empty.\n";
return T(); // 返回默认值或者抛异常
}
T value = items[front];
front = (front + 1) % size;
return value;
}
// 检查队列是否为空
bool isEmpty() const {
return front == rear;
}
// 获取队列当前的大小
int getSize() const {
return rear >= front ? rear - front + 1 : size - front;
}
// 析构函数,释放内存
~Queue() {
delete[] items;
}
};
int main() {
Queue<int> queue(5);
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
std::cout << "Size of the queue: " << queue.getSize() << "\n";
std::cout << "Dequeued element: " << queue.dequeue() << "\n";
std::cout << "Is queue empty? " << (queue.isEmpty() ? "Yes" : "No") << "\n";
return 0;
}
```
在这个例子中,我们使用了模板允许存储任意类型的元素。队列满、空的检查分别通过比较`front`和`rear`来实现。`enqueue`和`dequeue`操作使用环形缓冲区来避免边界问题。
阅读全文