定义一个链队列,实现入队和出队的操作
时间: 2023-11-04 18:05:03 浏览: 96
链队列是一种基于链表实现的队列,其队首和队尾分别位于链表的头部和尾部。下面是一个 C++ 实现的链队列,包括入队和出队操作:
```c++
#include <iostream>
using namespace std;
// 链队列结点的定义
struct Node {
int data;
Node* next;
};
class LinkedQueue {
public:
LinkedQueue() {
front = rear = new Node; // 初始化头结点
front->next = nullptr;
}
~LinkedQueue() {
while (front != nullptr) {
rear = front->next;
delete front;
front = rear;
}
}
// 判断队列是否为空
bool isEmpty() const {
return front == rear;
}
// 入队操作
void enqueue(int x) {
Node* p = new Node;
p->data = x;
p->next = nullptr;
rear->next = p;
rear = p;
}
// 出队操作
int dequeue() {
if (isEmpty()) {
cout << "Queue is empty!" << endl;
return -1;
}
Node* p = front->next;
int x = p->data;
front->next = p->next;
if (rear == p) rear = front; // 如果出队后队列为空,重置尾指针
delete p;
return x;
}
private:
Node* front; // 队头指针
Node* rear; // 队尾指针
};
int main() {
LinkedQueue q;
q.enqueue(1);
q.enqueue(2);
q.enqueue(3);
cout << q.dequeue() << endl; // output: 1
cout << q.dequeue() << endl; // output: 2
cout << q.dequeue() << endl; // output: 3
cout << q.dequeue() << endl; // output: "Queue is empty!"
return 0;
}
```
在上面的实现中,我们使用了头结点来作为链队列的头部,以便于对空队列的处理。同时,我们还定义了一个辅助指针 `rear`,来指向队尾结点,以便于入队操作的实现。
阅读全文