编程实现链队列的各种基本运算,然后设计主程序实现依次让字符串zhangsan、lisi、wangmazi、zhanglong、zhaohu、wangchao、mahan、sunyan入队,再依次出队。链队列的基本运算包括:初始化、入队、出队、置空、销毁。
时间: 2024-10-24 08:06:46 浏览: 13
python实现字符串和字典的转换
5星 · 资源好评率100%
链队列的基本运算是线性的,我们可以在C++中创建一个链队列类来实现这些操作。首先,我们需要定义一个节点类`Node`和一个队列类`Queue`。
```cpp
#include <iostream>
using namespace std;
// 定义链表节点
struct Node {
string data;
Node* next;
Node(const string& data): data(data), next(nullptr) {}
};
// 定义链队列类
class Queue {
private:
Node* front, *rear; // 分别表示队首和队尾
public:
Queue(): front(nullptr), rear(nullptr) {} // 初始化队列为空
~Queue(); // 销毁函数,释放所有节点内存
void enqueue(string item); // 入队
string dequeue(); // 出队
bool isEmpty(); // 判断队列是否为空
};
// 具体实现
void Queue::enqueue(string item) {
Node* newNode = new Node(item);
if (!rear) { // 如果队列为空,前后都指newNode
front = rear = newNode;
} else {
rear->next = newNode; // 否则,把新节点连接到队尾
rear = newNode; // 更新队尾指针
}
}
string Queue::dequeue() {
if (isEmpty()) throw "Queue is empty"; // 如果队列为空,抛异常
string item = front->data; // 保存队首元素
Node* temp = front; // 记录当前节点
front = front->next; // 移动队首指针
delete temp; // 释放当前节点
return item; // 返回已处理的元素
}
bool Queue::isEmpty() const {
return front == nullptr; // 检查队首是否为空
}
Queue::~Queue() {
while (!isEmpty()) {
Node* temp = front;
front = front->next;
delete temp;
}
front = rear = nullptr;
}
int main() {
Queue q;
q.enqueue("zhangsan");
q.enqueue("lisi");
q.enqueue("wangmazi");
q.enqueue("zhanglong");
q.enqueue("zhaohu");
q.enqueue("wangchao");
q.enqueue("mahan");
q.enqueue("sunyan");
cout << "Output elements from the queue:" << endl;
for(int i=0; i<7; ++i) {
try {
cout << q.dequeue() << endl;
} catch (const char* msg) {
cerr << msg << endl;
}
}
return 0;
}
阅读全文