实现一个链队列及基本功能完整代码
时间: 2023-06-20 18:08:21 浏览: 102
以下是一个简单的链队列的完整代码,包括入队、出队、判空、获取队首元素等基本功能:
```c++
#include <iostream>
using namespace std;
// 定义链队列结点结构体
struct QueueNode {
int data;
QueueNode* next;
};
class LinkedQueue {
private:
QueueNode* front; // 队头指针
QueueNode* rear; // 队尾指针
public:
// 构造函数,初始化队头和队尾指针
LinkedQueue() {
front = rear = new QueueNode;
front->next = nullptr;
}
// 判断队列是否为空
bool isEmpty() {
return front == rear;
}
// 入队,将元素插入到队尾
void enqueue(int x) {
QueueNode* newNode = new QueueNode;
newNode->data = x;
newNode->next = nullptr;
rear->next = newNode;
rear = newNode;
}
// 出队,删除队头元素并返回其值
int dequeue() {
if (isEmpty()) {
cout << "队列已空,无法出队!" << endl;
return -1;
}
QueueNode* tmp = front->next;
int x = tmp->data;
front->next = tmp->next;
if (rear == tmp) rear = front; // 如果出队的是队尾元素,更新rear指针
delete tmp;
return x;
}
// 获取队头元素的值
int getFront() {
if (isEmpty()) {
cout << "队列为空,无法获取队头元素!" << endl;
return -1;
}
return front->next->data;
}
// 获取队列长度
int getSize() {
int size = 0;
QueueNode* p = front->next;
while (p != nullptr) {
size++;
p = p->next;
}
return size;
}
// 清空队列
void clear() {
QueueNode* p = front->next;
while (p != nullptr) {
QueueNode* tmp = p;
p = p->next;
delete tmp;
}
front->next = nullptr;
rear = front;
}
// 输出队列中的所有元素
void printQueue() {
if (isEmpty()) {
cout << "队列为空!" << endl;
return;
}
QueueNode* p = front->next;
while (p != nullptr) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
};
int main() {
LinkedQueue q;
q.enqueue(1);
q.enqueue(2);
q.enqueue(3);
q.printQueue(); // 输出:1 2 3
q.dequeue();
q.printQueue(); // 输出:2 3
cout << q.getFront() << endl; // 输出:2
cout << q.getSize() << endl; // 输出:2
q.clear();
q.printQueue(); // 输出:队列为空!
return 0;
}
```
阅读全文