循环队列运行效果图,要能体现入队,出队时队头、队尾的变化,和成环的效果用C++语言编写
时间: 2024-10-27 13:10:56 浏览: 24
huanxingduilie.rar_环形队_环形队列
循环队列是一种特殊的线性表,它通过将队尾链接到队首,实现了在固定大小数组上支持高效的入队和出队操作。当队列满时,新元素会覆盖掉第一个元素;同样地,当队列空时,出队操作会从最后一个元素开始。
下面是一个简单的C++代码示例,使用数组实现循环队列,并画出运行图:
```cpp
#include <iostream>
using namespace std;
#define MAX_SIZE 10
struct Node {
int data;
struct Node* next;
};
class CircularQueue {
private:
Node *front, *rear; // front指针指向队头,rear指针指向队尾
bool isFull, isEmpty;
public:
CircularQueue() : front(nullptr), rear(nullptr), isFull(false), isEmpty(true) {}
void enqueue(int value) {
if (isFull) {
cout << "Queue is full!" << endl;
return;
}
Node* newNode = new Node();
newNode->data = value;
newNode->next = front; // 因为是循环队列,所以把新节点的next设为当前队头
if (isEmpty) {
front = rear = newNode;
} else {
rear->next = newNode;
rear = newNode;
}
isFull = true;
isEmpty = false;
}
int dequeue() {
if (isEmpty) {
cout << "Queue is empty!" << endl;
return -1;
}
int removedValue = front->data;
Node* temp = front;
if (front == rear) { // 队列非空且只有一个元素,处理成环的情况
front = rear = nullptr;
} else {
front = front->next;
}
delete temp;
isFull = false;
isEmpty = front == rear;
return removedValue;
}
// 可视化代码略,这里仅展示核心结构和操作
};
int main() {
CircularQueue cq;
for (int i = 1; i <= 5; ++i) {
cq.enqueue(i);
cout << "Enqueue: " << i << ", Queue: ";
printQueue(cq); // 模拟打印函数,用于可视化
cout << "\n";
}
for (int i = 5; i >= 1; --i) {
cout << "Dequeue: " << cq.dequeue() << ", Queue: ";
printQueue(cq);
cout << "\n";
}
return 0;
}
// 假设printQueue()函数用于按顺序打印队列元素
```
这个代码展示了循环队列的基本操作,包括入队(enqueue)和出队(dequeue),以及在队列满和空时的处理。运行此程序,你可以看到队列的状态变化,包括队头、队尾以及成环的情况。
阅读全文