C++:队列的链式表示和实现,并测试代码
时间: 2024-12-02 13:28:41 浏览: 28
在C++中,队列是一种线性数据结构,通常遵循先进先出(FIFO)的原则。队列可以使用链表进行实现,特别是单向链表,因为链表支持高效的插入和删除操作。
链式队列的实现主要包括两个部分:节点结构和队列结构。首先,我们创建一个队列节点(Node),它包含一个数据元素和一个指向下一个节点的指针:
```cpp
struct Node {
int data; // 数据域
Node* next; // 指向下一个节点的指针
};
```
然后,我们定义一个队列类(Queue),它有两个成员:头节点(front)和尾节点(rear)。当队列为空时,front 和 rear 都是指针NULL。
```cpp
class Queue {
private:
Node* front;
Node* rear;
public:
// 构造函数和析构函数
Queue() : front(nullptr), rear(nullptr) {}
~Queue();
// 插入元素到队尾
void enqueue(int value);
// 删除并返回队首元素
int dequeue();
// 检查队列是否为空
bool isEmpty();
};
```
接下来,我们实现插入(enqueue)、删除(dequeue)以及检查空队列的方法:
```cpp
// 插入元素到队尾
void Queue::enqueue(int value) {
Node* newNode = new Node{value, nullptr};
if (isEmpty()) {
front = rear = newNode;
} else {
rear->next = newNode;
rear = newNode;
}
}
// 删除并返回队首元素
int Queue::dequeue() {
if (isEmpty()) {
throw std::runtime_error("Queue is empty");
}
int value = front->data;
Node* temp = front;
front = front->next;
delete temp;
return value;
}
// 检查队列是否为空
bool Queue::isEmpty() const {
return front == nullptr;
}
```
最后,我们可以编写简单的测试代码:
```cpp
int main() {
Queue q;
try {
q.enqueue(1);
q.enqueue(2);
q.enqueue(3);
cout << "Dequeued element: " << q.dequeue() << endl; // 输出: Dequeued element: 1
cout << "Queue size after dequeue: " << q.size(); // 假设size()是一个返回当前元素数量的方法
} catch (const std::exception& e) {
cerr << "Error: " << e.what() << endl;
}
return 0;
}
```
这只是一个基本的链式队列实现,实际应用中可能需要考虑异常处理、内存管理等问题。
阅读全文