用c++编写使用数组和链表分别实现队列的代码,并讲解这两种方式的优缺点。
时间: 2024-11-20 20:37:01 浏览: 12
《数据结构与算法分析》上的代码实现.zip
首先,我们来看如何用C++分别用数组和链表实现队列。
**1. 使用数组实现队列(Array Queue)**
```cpp
#include <iostream>
const int ARRAY_SIZE = 10;
int queue[ARRAY_SIZE];
int front = -1, rear = -1;
void enqueue(int item) {
if ((rear + 1) % ARRAY_SIZE == front) {
std::cout << "Queue is full\n";
return;
}
rear = (rear + 1) % ARRAY_SIZE;
queue[rear] = item;
}
int dequeue() {
if (front == rear) {
std::cout << "Queue is empty\n";
return -1;
}
int temp = queue[front];
front = (front + 1) % ARRAY_SIZE;
return temp;
}
```
优点:
- 简单直接,访问元素时效率高,因为数组索引可以直接计算得到。
- 对于固定大小的队列,内存分配一次性完成,节省空间。
缺点:
- 队列容量固定,无法动态调整,如果需要大容量,可能会浪费大量空间。
- 当插入新元素导致队尾溢出时,需要特殊处理,增加复杂性。
**2. 使用链表实现队列(Linked List Queue)**
```cpp
#include <iostream>
using namespace std;
struct Node {
int data;
Node* next;
};
class Queue {
private:
Node* front, *rear;
public:
void enqueue(int value) {
Node* newNode = new Node();
newNode->data = value;
newNode->next = nullptr;
if (!front) {
front = rear = newNode;
} else {
rear->next = newNode;
rear = newNode;
}
}
int dequeue() {
if (!front) {
cout << "Queue is empty\n";
return -1;
}
int data = front->data;
Node* temp = front;
front = front->next;
delete temp;
if (!front) rear = nullptr;
return data;
}
};
```
优点:
- 容量可动态增长,灵活性高,不受初始大小限制。
- 插入和删除操作在常数时间内完成,性能相对较好。
缺点:
- 内存管理较复杂,每次插入和删除都需要创建和释放节点。
- 访问元素的速度相对较慢,因为需要遍历链表。
总结
阅读全文