、编程实现链队列的各种基本运算,然后设计主程序实现依次让字符串 zhangsan、lisi、wangmazi、zhanglong、zhaohu、wangchao、mahan、 sunyan入队,再依次出队。链队列的基本运算包括:初始化、入队、出队、置 空、销毁。
时间: 2024-10-23 07:16:22 浏览: 25
链队列是一种数据结构,它通过节点间的链接来实现元素的插入和删除操作,而不是像数组那样固定大小。下面是链队列的一些基本运算:
1. **初始化** (Create):创建一个新的链队列,通常包含一个头结点,但没有实际的数据元素。
```c++
struct Node {
char data;
Node* next;
};
Node* createQueue() {
return new Node();
}
```
2. **入队** (Enqueue):在链表的末尾添加新的元素。
```c++
void enqueue(Node*& head, const char& value) {
Node* newNode = new Node{value, nullptr};
if (!head) {
head = newNode;
} else {
Node* current = head;
while (current->next != nullptr) {
current = current->next;
}
current->next = newNode;
}
}
```
3. **出队** (Dequeue):移除并返回链表的第一个元素,然后更新头结点。
```c++
char dequeue(Node*& head) {
if (!head) {
throw std::runtime_error("Queue is empty");
}
char value = head->data;
Node* temp = head;
head = head->next;
delete temp;
return value;
}
```
4. **置空** (Empty):将链表的所有元素都删除,使其变成空。
```c++
void emptyQueue(Node*& head) {
Node* temp = head;
while (temp) {
Node* nextTemp = temp->next;
delete temp;
temp = nextTemp;
}
head = nullptr;
}
```
5. **销毁** (Destroy):释放所有动态分配的内存。
```c++
void destroyQueue(Node*& head) {
emptyQueue(head);
delete head;
}
```
为了实现上述操作,你可以按顺序调用这些函数,并结合用户提供的名字列表:
```c++
int main() {
Node* head = createQueue();
for (const auto& name : {"zhangsan", "lisi", ...}) {
enqueue(head, name);
}
// 出队并打印
while (head) {
printf("%s ", dequeue(head));
}
// 清空并销毁链队
emptyQueue(head);
destroyQueue(head);
return 0;
}
```
阅读全文