初始化一顺序队列(循环队列),要求从键盘输入5个整数入队,并依次读取队头元素输出,以理解队的先进先出特性。 (2)初始化一链队列,完成(1)中的任务。
时间: 2024-10-19 20:09:54 浏览: 25
链队列的实现
首先,我们来看如何使用数组实现顺序队列(循环队列):
```c++
#include <iostream>
#define MAX_SIZE 5 // 队列最大容量
int queue[MAX_SIZE];
int front = -1; // 队头指针
int rear = -1; // 队尾指针
// 入队操作
void enqueue(int value) {
if ((rear + 1) % MAX_SIZE == front) { // 判断队满
std::cout << "Queue is full.\n";
return;
}
rear = (rear + 1) % MAX_SIZE; // 循环处理
queue[rear] = value;
if (front == -1) {
front = rear; // 队头等于队尾,首次入队
}
}
// 出队操作
int dequeue() {
if (front == -1 || front == rear) { // 判断队空
std::cout << "Queue is empty.\n";
return -1; // 返回一个特殊值表示队列为空
}
int value = queue[front]; // 保存队头元素
front = (front + 1) % MAX_SIZE; // 更新队头
return value;
}
// 主函数,演示先进先出特性
int main() {
for (int i = 0; i < 5; ++i) {
int num;
std::cin >> num;
enqueue(num);
std::cout << "Dequeued number: " << dequeue() << "\n"; // 输出队头并移除
}
return 0;
}
```
对于链表实现链式队列(单链表)的过程会更简单一些,因为不需要预先设定固定大小:
```c++
#include <iostream>
using namespace std;
struct Node {
int data;
Node* next;
};
Node* front = nullptr; // 链表头节点
Node* rear = nullptr; // 链表尾节点
// 在链表头部插入新节点
void enqueue(int value) {
Node* newNode = new Node();
newNode->data = value;
newNode->next = front;
if (front != nullptr) {
front->prev = newNode;
} else {
rear = newNode;
}
front = newNode;
}
// 删除并返回队头元素
int dequeue() {
if (front == nullptr) { // 队列为空
std::cout << "Queue is empty.\n";
return -1;
}
Node* temp = front;
front = front->next;
delete temp;
return temp->data;
}
// 主函数,演示先进先出特性
int main() {
for (int i = 0; i < 5; ++i) {
int num;
cin >> num;
enqueue(num);
cout << "Dequeued number: " << dequeue() << endl;
}
return 0;
}
```
现在我们完成了两个任务:
1. 初始化了顺序队列和链式队列,并可以将5个整数依次入队。
2. 通过读取队头元素并输出,验证了队列的先进先出特性。
阅读全文