C++:队列的链式表示和实现,并测试的整体可运行代码
时间: 2024-12-02 12:18:09 浏览: 24
在C++中,队列的链式表示通常涉及到双向链表,因为队列是一种先进先出(FIFO)的数据结构,而链表可以方便地在头部(即队首)添加元素和在尾部删除元素,这正是队列操作的基本需求。
以下是一个简单的单链表队列的实现:
```cpp
#include <iostream>
// 定义节点结构体
struct Node {
int data;
Node* next;
};
// 队列类
class Queue {
private:
Node* front; // 队首指针
Node* rear; // 队尾指针
public:
Queue() : front(nullptr), rear(nullptr) {}
// 添加元素到队尾
void enqueue(int value) {
Node* newNode = new Node{value, nullptr};
if (rear == nullptr) {
front = rear = newNode;
} else {
rear->next = newNode;
rear = newNode;
}
}
// 从队首移除并返回元素
int dequeue() {
if (front == nullptr) {
throw std::runtime_error("Queue is empty");
}
int removedValue = front->data;
Node* temp = front;
front = front->next;
delete temp;
if (front == nullptr) {
rear = nullptr;
}
return removedValue;
}
// 检查队列是否为空
bool isEmpty() const {
return front == nullptr;
}
// 打印队列
void display() const {
Node* current = front;
while (current != nullptr) {
std::cout << current->data << " ";
current = current->next;
}
std::cout << "\n";
}
};
int main() {
Queue q;
q.enqueue(10);
q.enqueue(20);
q.enqueue(30);
std::cout << "Before dequeuing:\n";
q.display();
int removed = q.dequeue();
std::cout << "Removed: " << removed << ", Queue after dequeue:\n";
q.display();
return 0;
}
```
这个代码首先创建了一个`Queue`类,它有两个私有成员变量`front`和`rear`分别代表队列的头和尾。`enqueue`方法用于向队尾添加元素,`dequeue`方法用于从队首移除元素。在`main`函数中,我们演示了如何创建、填充和遍历队列。
阅读全文