用c++编码 设计一个队列类,实现的操作有初始化队列、入队、出队、判队空
时间: 2023-07-10 17:41:10 浏览: 83
好的,这里是一个基于链表实现的队列类的示例代码:
```c++
#include <iostream>
class Node {
public:
Node(int data) : m_data(data), m_next(nullptr) {}
int m_data;
Node* m_next;
};
class Queue {
public:
Queue();
~Queue();
void init(); // 初始化队列
void enqueue(int data); // 入队
int dequeue(); // 出队
bool isEmpty(); // 判队空
private:
Node* m_front; // 队头指针
Node* m_rear; // 队尾指针
};
Queue::Queue() {
init();
}
Queue::~Queue() {
while (m_front) {
Node* temp = m_front;
m_front = m_front->m_next;
delete temp;
}
}
void Queue::init() {
m_front = nullptr;
m_rear = nullptr;
}
void Queue::enqueue(int data) {
Node* node = new Node(data);
if (!m_rear) {
m_front = node;
} else {
m_rear->m_next = node;
}
m_rear = node;
}
int Queue::dequeue() {
if (isEmpty()) { // 队列为空
std::cout << "Queue is empty, cannot dequeue." << std::endl;
return -1;
}
int data = m_front->m_data;
Node* temp = m_front;
m_front = m_front->m_next;
if (!m_front) { // 队列已空
m_rear = nullptr;
}
delete temp;
return data;
}
bool Queue::isEmpty() {
return !m_front;
}
int main() {
Queue queue;
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
std::cout << queue.dequeue() << std::endl; // 输出 1
std::cout << queue.dequeue() << std::endl; // 输出 2
std::cout << queue.dequeue() << std::endl; // 输出 3
std::cout << queue.dequeue() << std::endl; // 输出 "Queue is empty, cannot dequeue."
return 0;
}
```
在这个示例代码中,我们使用了链表来存储队列中的数据,并使用两个指针 `m_front` 和 `m_rear` 分别表示队头和队尾的位置。初始化队列时,我们将 `m_front` 和 `m_rear` 都设为 nullptr。入队操作时,我们创建一个新的节点,将数据存入节点中,然后将节点插入到链表的末尾,更新 `m_rear` 指针。出队操作时,我们先判断队列是否为空,如果不为空,就将队头的数据取出,并将 `m_front` 指向下一个节点,更新 `m_rear` 指针。判队空操作就是判断 `m_front` 是否为空。
当然,这只是一个基本的队列实现,还有很多优化和改进的空间,比如使用循环链表实现队列、使用模板类实现通用队列等等。
阅读全文