返回
队列结构与算法深度剖析
见解分享
2023-09-28 21:44:52
引言
数据结构是计算机科学的基础,而队列作为一种重要的线性数据结构,在众多领域发挥着至关重要的作用。本文将深入探索队列的结构、相关算法,以及如何在代码中实现队列。
队列结构
队列是一种遵循先进先出(FIFO)原则的存储结构。队列的尾部称为队尾,头部称为队头。当元素插入队列时,它们添加到队尾;当元素从队列中删除时,它们从队头删除。
循环队列
循环队列是一种常见的队列实现方式,它使用一个固定大小的数组来存储元素。循环队列有两个指针:队头指针和队尾指针。队头指针指向队列中的第一个元素,队尾指针指向下一个可用于插入元素的位置。
算法
入队
入队算法将元素添加到队列的队尾:
- 检查队列是否已满(队尾指针等于队头指针)。
- 如果队列已满,则返回错误。
- 否则,将元素插入队尾(队尾指针指向的新位置),并更新队尾指针。
出队
出队算法从队列的队头删除元素:
- 检查队列是否为空(队尾指针等于队头指针)。
- 如果队列为空,则返回错误。
- 否则,从队头(队头指针指向的位置)删除元素,并更新队头指针。
队列的判断
队列为空
- 如果队尾指针等于队头指针,则队列为空。
队列已满
- 如果队尾指针指向数组的最后一个位置,并且队头指针不指向数组的第一个位置,则队列已满。
代码实现
循环队列的 C++ 代码
class CircularQueue {
int *arr;
int size;
int head, tail;
public:
CircularQueue(int n) {
size = n;
arr = new int[size];
head = tail = -1;
}
void enqueue(int data) {
if (isFull()) return;
if (isEmpty()) head = tail = 0;
tail = (tail + 1) % size;
arr[tail] = data;
}
int dequeue() {
if (isEmpty()) return -1;
int data = arr[head];
if (head == tail) head = tail = -1;
else head = (head + 1) % size;
return data;
}
bool isEmpty() { return head == -1; }
bool isFull() { return (tail + 1) % size == head; }
};