(4)队列的链式实现:建立一个链式队列,将a,b,c入队;进行两次出队操作并输出出队元素;将d,e入队,输出当前队列中所有元素。用c++
时间: 2024-04-12 12:31:17 浏览: 106
下面是使用C++实现链式队列的代码示例:
```cpp
#include <iostream>
// 定义链表的节点结构
struct Node {
char data;
Node* next;
};
class Queue {
private:
Node* front; // 队头指针
Node* rear; // 队尾指针
public:
Queue() {
front = nullptr;
rear = nullptr;
}
~Queue() {
// 释放队列中的所有节点
Node* current = front;
while (current != nullptr) {
Node* temp = current;
current = current->next;
delete temp;
}
}
// 入队操作
void enqueue(char data) {
Node* newNode = new Node();
newNode->data = data;
newNode->next = nullptr;
if (rear == nullptr) {
// 空队列,队头和队尾指针都指向新节点
front = newNode;
rear = newNode;
} else {
// 非空队列,将新节点链接到队尾,并更新队尾指针
rear->next = newNode;
rear = newNode;
}
}
// 出队操作
char dequeue() {
if (front == nullptr) {
// 空队列,返回空字符表示出队失败
return '\0';
} else {
// 记录当前队头节点,并更新队头指针
Node* temp = front;
front = front->next;
// 如果出队后队列为空,更新队尾指针为nullptr
if (front == nullptr) {
rear = nullptr;
}
char data = temp->data;
delete temp; // 释放原队头节点的内存
return data; // 返回出队元素的值
}
}
// 输出当前队列中所有元素
void printQueue() {
Node* current = front;
while (current != nullptr) {
std::cout << current->data << " ";
current = current->next;
}
std::cout << std::endl;
}
};
int main() {
Queue queue;
// 入队操作
queue.enqueue('a');
queue.enqueue('b');
queue.enqueue('c');
// 出队操作并输出出队元素
std::cout << "出队元素: " << queue.dequeue() << std::endl;
std::cout << "出队元素: " << queue.dequeue() << std::endl;
// 入队操作
queue.enqueue('d');
queue.enqueue('e');
// 输出当前队列中所有元素
std::cout << "当前队列中所有元素: ";
queue.printQueue();
return 0;
}
```
这段代码通过定义一个链表节点结构`Node`和一个`Queue`类来实现链式队列。`enqueue`函数用于入队操作,将新节点链接到队尾;`dequeue`函数用于出队操作,返回队头元素并删除队头节点;`printQueue`函数用于输出当前队列中的所有元素。在`main`函数中,首先进行三次入队操作(入队元素为'a'、'b'、'c'),然后进行两次出队操作,并输出出队元素,最后进行两次入队操作(入队元素为'd'、'e'),并输出当前队列中所有元素。
阅读全文