C++:队列的链式表示并用int main实现
时间: 2024-12-02 21:16:58 浏览: 13
在C++中,队列(Queue)可以使用链表数据结构实现,特别是通过双向链表来支持队列的基本操作:入队(Enqueue)和出队(Dequeue)。这种实现允许我们在O(1)的时间复杂度内完成在队尾添加元素(Enqueue)和从队头删除元素(Dequeue),因为链表节点可以直接指向下一个节点。
下面是一个简单的C++链式队列的实现,以及一个`main`函数示例:
```cpp
#include <iostream>
// 队列节点结构体
struct Node {
int data;
Node* next;
Node* prev; // 双向链表需要prev指向前一个节点
};
class Queue {
private:
Node* front; // 队首
Node* rear; // 队尾
public:
Queue() : front(nullptr), rear(nullptr) {}
// 入队
void enqueue(int value) {
Node* newNode = new Node();
newNode->data = value;
newNode->next = nullptr;
if (rear == nullptr) {
front = rear = newNode;
} else {
rear->next = newNode;
newNode->prev = rear;
rear = newNode;
}
std::cout << "Enqueued: " << value << std::endl;
}
// 出队
void dequeue() {
if (front == nullptr) {
std::cout << "Error: Queue is empty." << std::endl;
return;
}
Node* temp = front;
front = front->next;
if (front != nullptr) {
front->prev = nullptr;
} else {
rear = nullptr;
}
delete temp;
std::cout << "Dequeued: " << temp->data << std::endl;
}
// 判断队列是否为空
bool isEmpty() const {
return front == nullptr;
}
};
int main() {
Queue queue;
queue.enqueue(10);
queue.enqueue(20);
queue.dequeue(); // Dequeues 10
if (queue.isEmpty()) {
std::cout << "Queue is now empty." << std::endl;
}
return 0;
}
```
在这个例子中,我们创建了一个名为`Queue`的类,并实现了基本的队列操作。`enqueue`用于将元素添加到队尾,`dequeue`用于移除并返回队头元素,`isEmpty`用于检查队列是否为空。在`main`函数中,我们演示了如何使用这个队列。
阅读全文