编写一个简单的队列类,支持基本的队列操作:入队、出队、取队首元素和检查队列是否为空c++
时间: 2024-08-12 15:08:09 浏览: 48
在C++中,你可以使用STL(标准模板库)中的`std::queue`容器来创建一个简单的队列,但如果你想自己编写一个队列类,这里是一个基础的实现,使用了模板和指针来管理队列元素:
```cpp
template <typename T>
class MyQueue {
private:
struct Node {
T data;
Node* next;
};
Node* front; // 队首
Node* rear; // 队尾
public:
// 构造函数和析构函数
MyQueue() : front(nullptr), rear(nullptr) {}
~MyQueue() {
clear();
}
// 入队操作: 在队尾添加元素
void enqueue(T value) {
Node* newNode = new Node();
newNode->data = value;
newNode->next = nullptr;
if (rear == nullptr) {
front = rear = newNode;
} else {
rear->next = newNode;
rear = newNode;
}
}
// 出队操作: 删除队首元素并返回
T dequeue() {
if (front == nullptr) {
throw std::runtime_error("Queue is empty");
}
T result = front->data;
Node* temp = front;
front = front->next;
if (front == nullptr) {
rear = nullptr;
}
delete temp;
return result;
}
// 取队首元素: 返回队首元素但不删除
T getFront() const {
if (front == nullptr) {
throw std::runtime_error("Queue is empty");
}
return front->data;
}
// 检查队列是否为空
bool isEmpty() const {
return front == nullptr;
}
// 清空队列
void clear() {
Node* current = front;
while (current != nullptr) {
Node* next = current->next;
delete current;
current = next;
}
front = rear = nullptr;
}
};
// 示例使用:
int main() {
MyQueue<int> q;
q.enqueue(1);
q.enqueue(2);
cout << "Front element: " << q.getFront() << endl;
q.dequeue();
cout << "Queue after dequeue: ";
if (q.isEmpty()) {
cout << "Empty" << endl;
} else {
cout << q.getFront() << endl;
}
return 0;
}
```
阅读全文