用c++写一个代码 代码题目是循环单链表模拟实现队列
时间: 2024-10-13 20:08:03 浏览: 38
以下是使用C++实现循环单链表模拟队列的一个简单例子:
```cpp
#include <iostream>
// 定义节点结构体
struct Node {
int data;
Node* next;
};
// 创建循环链表头节点
Node* createCircularList() {
Node* head = new Node();
head->data = -1; // 初始化为空值
head->next = head; // 链表形成循环
return head;
}
// 插入数据到队尾
void enqueue(Node** head, int value) {
Node* newNode = new Node();
newNode->data = value;
if (*head == nullptr) {
*head = newNode;
(*head)->next = *head;
} else {
Node* current = *head;
while (current->next != *head) {
current = current->next;
}
current->next = newNode;
newNode->next = *head;
}
}
// 从队首删除数据并返回
int dequeue(Node** head) {
if (*head == nullptr) {
std::cout << "Queue is empty!" << std::endl;
return -1;
}
int removedData = (*head)->data;
Node* temp = *head;
*head = (*head)->next;
if (*head == *temp) { // 如果队列只剩下一个元素
delete temp;
*head = nullptr;
} else {
temp->next = *head;
}
return removedData;
}
// 检查队列是否为空
bool isEmpty(Node* head) {
return head == nullptr || head->next == head;
}
int main() {
Node* head = createCircularList();
enqueue(&head, 1);
enqueue(&head, 2);
enqueue(&head, 3);
std::cout << "Dequeued element: " << dequeue(&head) << std::endl;
std::cout << "Is queue empty? " << (isEmpty(head) ? "Yes" : "No") << std::endl;
return 0;
}
```
这个代码首先创建了一个循环链表,并实现了enqueue(入队)和dequeue(出队)的操作。`main()`函数演示了如何使用这两个方法。队列是否为空则通过`isEmpty()`函数检查。
阅读全文