当前位置:实例文章 » 其他实例» [文章]21 - 队列 - 循环队列——队列的顺序表示和实现

21 - 队列 - 循环队列——队列的顺序表示和实现

发布人:shili8 发布时间:2025-01-08 00:46 阅读次数:0

**队列**

队列是一种线性数据结构,遵循先进先出(FIFO)原则。它允许添加元素到末尾,并从头部取出元素。在本文中,我们将讨论队列的顺序表示和实现。

### 队列的顺序表示队列可以使用数组或链表来实现。下面是队列的基本操作:

* **enqueue(x)**:向队列末尾添加一个新元素x。
* **dequeue()**:从队列头部取出一个元素,并返回它。
* **peek()**:查看队列头部的元素,但不移除它。

### 队列的实现#### 数组实现我们可以使用数组来实现队列。下面是C++代码示例:

cppclass Queue {
private:
 int *data;
 int front, rear, size;

public:
 Queue(int capacity) : data(new int[capacity]), front(0), rear(0), size(0) {}

 ~Queue() { delete[] data; }

 void enqueue(int x) {
 if (size == data.length()) {
 // Handle queue overflow return;
 }
 data[rear++] = x;
 size++;
 }

 int dequeue() {
 if (isEmpty()) {
 // Handle empty queue return -1;
 }
 int x = data[front++];
 size--;
 return x;
 }

 int peek() {
 if (isEmpty()) {
 // Handle empty queue return -1;
 }
 return data[front];
 }

 bool isEmpty() { return size ==0; }
};


#### 链表实现我们也可以使用链表来实现队列。下面是C++代码示例:

cppclass Node {
public:
 int data;
 Node *next;

 Node(int x) : data(x), next(nullptr) {}
};

class Queue {
private:
 Node *head, *tail;

public:
 void enqueue(int x) {
 Node *node = new Node(x);
 if (isEmpty()) {
 head = tail = node;
 } else {
 tail->next = node;
 tail = node;
 }
 }

 int dequeue() {
 if (isEmpty()) {
 // Handle empty queue return -1;
 }
 int x = head->data;
 Node *temp = head;
 head = head->next;
 delete temp;
 return x;
 }

 int peek() {
 if (isEmpty()) {
 // Handle empty queue return -1;
 }
 return head->data;
 }

 bool isEmpty() { return head == nullptr; }
};


### 循环队列循环队列是一种特殊的队列,它允许在队列末尾添加元素时,自动将头部指针移动到队列开始处。这样可以避免队列溢出的问题。

下面是C++代码示例:

cppclass CircularQueue {
private:
 int *data;
 int front, rear, size;

public:
 CircularQueue(int capacity) : data(new int[capacity]), front(0), rear(0), size(0) {}

 ~CircularQueue() { delete[] data; }

 void enqueue(int x) {
 if (size == data.length()) {
 // Handle queue overflow return;
 }
 data[rear++] = x;
 if (rear == data.length()) {
 rear =0;
 }
 size++;
 }

 int dequeue() {
 if (isEmpty()) {
 // Handle empty queue return -1;
 }
 int x = data[front++];
 if (front == data.length()) {
 front =0;
 }
 size--;
 return x;
 }

 int peek() {
 if (isEmpty()) {
 // Handle empty queue return -1;
 }
 return data[front];
 }

 bool isEmpty() { return size ==0; }
};


### 总结在本文中,我们讨论了队列的顺序表示和实现。我们使用数组或链表来实现队列,并提供了C++代码示例。我们还讨论了循环队列,它允许自动将头部指针移动到队列开始处,避免队列溢出的问题。

相关标签:队列
其他信息

其他资源

Top