C++数据结构的队列详解

yizhihongxing

C++数据结构的队列详解

队列是什么?

队列是一种先进先出(First In First Out, FIFO)的数据结构,类似于现实生活中的排队等待服务。

队列中的数据按照先进先出的原则被处理。新的元素只能被插入在队列的末尾,而旧的元素只能从队列的开头被删除。因此,队列的末尾称为队尾,队列的开头被称为队头。

队列的实现方式

数组实现方式

队列可以使用数组实现,在这种实现方式中,队列是一个固定大小的数组,插入和删除操作会改变队列的头和尾指针。

// C++数组实现队列的代码样例

class Queue {
    int* arr;       // 存储队列元素的数组
    int front;      // 队头指针
    int rear;       // 队尾指针
    int capacity;   // 队列的大小
    int count;      // 队列中元素的个数

public:
    // Constructor
    Queue(int size) {
        arr = new int[size];
        capacity = size;
        front = 0;
        rear = -1;
        count = 0;
    }

    // Destructor
    ~Queue() {
        delete[] arr;
    }

    // Enqueue operation
    void enqueue(int item) {
        if (isFull()) {
            cout << "Queue is full!" << endl;
            return;
        }

        rear = (rear + 1) % capacity;   // 尾指针移到队列结尾
        arr[rear] = item;
        count++;
    }

    // Dequeue operation
    void dequeue() {
        if (isEmpty()) {
            cout << "Queue is empty!" << endl;
            return;
        }

        front = (front + 1) % capacity; // 头指针向队列头移动
        count--;
    }

    // Check if queue is full
    bool isFull() {
        return count == capacity;
    }

    // Check if queue is empty
    bool isEmpty() {
        return count == 0;
    }
};

// 示例1
int main() {
    Queue queue(5);
    queue.enqueue(1);
    queue.enqueue(2);
    queue.enqueue(3);
    queue.dequeue();
    queue.enqueue(4);
    queue.enqueue(5);
    queue.enqueue(6);

    return 0;
}

// 示例2
int main() {
    Queue queue(5);
    queue.enqueue(1);
    queue.enqueue(2);
    queue.dequeue();
    queue.enqueue(3);
    queue.dequeue();
    queue.enqueue(4);

    return 0;
}

链表实现方式

另一种常用的实现方式是使用链表来实现队列。队列的头和尾可以使用指针进行追踪,这种方式可以处理变长队列,因为动态分配内存。

// C++链表实现队列的代码样例

class QueueNode {
public:
    int data;
    QueueNode* next;

    QueueNode(int data) {
        this->data = data;
        next = NULL;
    }
};

class Queue {
public:
    QueueNode *front, *rear;

    Queue() {
        front = rear = NULL;
    }

    // Enqueue operation
    void enqueue(int x) {
        QueueNode* temp = new QueueNode(x);

        if (rear == NULL) {
            front = rear = temp;
            return;
        }

        rear->next = temp;
        rear = temp;
    }

    // Dequeue operation
    void dequeue() {
        if (front == NULL) {
            return;
        }

        QueueNode* temp = front;
        front = front->next;

        if (front == NULL) {
            rear = NULL;
        }

        delete temp;
    }

    // Check if queue is empty
    bool isEmpty() {
        return (front == NULL && rear == NULL);
    }
};

// 示例1
int main() {
    Queue q;
    q.enqueue(1);
    q.enqueue(2);
    q.enqueue(3);
    q.dequeue();
    q.dequeue();
    q.enqueue(4);
    q.enqueue(5);
    q.enqueue(6);

    return 0;
}

// 示例2
int main() {
    Queue q;
    q.enqueue(1);
    q.enqueue(2);
    q.dequeue();
    q.enqueue(3);
    q.dequeue();
    q.enqueue(4);

    return 0;
}

总结

队列是一种非常有用的数据结构,可以使用数组或链表进行实现。它们允许我们以一种自然的方式对一些元素进行排队和处理。队列的基本操作是enqueue和dequeue。队列的另一个重要特性是先进先出,这意味着队列中元素的处理顺序始终按照它们被插入的顺序。这种数据结构非常适合实现不间断服务(如操作系统中的进程管理)。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++数据结构的队列详解 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • C++20中的结构化绑定类型示例详解

    ” C++20中的结构化绑定类型示例详解 ” 具体攻略如下: 什么是结构化绑定类型? 结构化绑定类型是C++17中的新特性,它可以让我们将一个复杂类型的元素绑定到某个变量上,从而更方便地使用这些元素。 C++20还进一步扩展了结构化绑定类型的功能,可以通过给用于引用的名字声明类型来进行显式类型的绑定。 结构化绑定类型的基本用法 下面的例子展示了如何使用结构化…

    数据结构 2023年5月17日
    00
  • C语言数据结构与算法之排序总结(一)

    好的!首先感谢你对我的提问,我将会在这里详细讲解“C语言数据结构与算法之排序总结(一)”的完整攻略。 概述 本文是关于 C 语言数据结构与算法中排序总结(一)的攻略说明。主要包括目录、排序算法、排序分析和示例演示等内容,让读者能够了解排序算法的基本思想、常见的分类和应用场景,以及不同排序算法的优缺点,进而选择适合的排序算法。 目录 基本概念 冒泡排序 插入排…

    数据结构 2023年5月17日
    00
  • C语言深入讲解链表的使用

    C语言深入讲解链表的使用 什么是链表? 链表是一种常用的数据结构,它的存储方式是通过指针相互连接实现的。链表是由若干个节点(node)构成的,每个节点都存储着一些信息和指向下一个节点的指针。 链表实现的基本操作 链表的基本操作包括插入节点、删除节点以及遍历链表。我们下面将通过代码示例详细介绍这些操作。 插入节点 链表的插入节点操作是指在链表的某一位置插入一个…

    数据结构 2023年5月17日
    00
  • C++深入分析讲解链表

    C++深入分析讲解链表 链表概述 链表是数据结构中最基本和重要的一种,它的实现可以分为链表的节点和链表的指针。每个节点都记录着链表中的一个元素,并带有一个指向下一个节点的指针,这样就可以通过遍历指针,达到遍历链表的目的。 链表数据结构 在C++中,链表可以通过结构体或者类来实现,比如以下这个结构体实现的单向链表: struct Node { int data…

    数据结构 2023年5月17日
    00
  • python算法与数据结构朋友圈与水杯实验题分析实例

    让我来详细讲解一下“python算法与数据结构朋友圈与水杯实验题分析实例”的完整攻略。 1. 前言 本文将分享两个Python的算法与数据结构问题,即朋友圈和水杯实验题。我们将分别介绍问题的背景、解题思路和代码实现。 2. 朋友圈问题 2.1 背景 给定一个M*N的矩阵,矩阵中的每个元素都是1或0。如果矩阵中的1元素相邻,即水平、垂直或对角线相邻,则将这些元…

    数据结构 2023年5月17日
    00
  • C语言数据结构之单链表操作详解

    C语言数据结构之单链表操作详解 本文将详细讲解C语言数据结构中单链表的操作方法,包括单链表的建立、遍历、插入、删除等操作,并提供两个示例进行说明。 单链表的定义 单链表是一种常见的动态数据结构,由若干节点组成,每个节点通常包含一个数据元素和一个指向下一个节点的指针。单链表最后一个节点的指针指向NULL,表示链表的结尾。 单链表的节点定义 单链表的节点通常由结…

    数据结构 2023年5月17日
    00
  • C语言数据结构与算法之排序总结(二)

    C语言数据结构与算法之排序总结(二) 本篇文章是关于C语言数据结构与算法中排序算法的详细讲解,涉及了八种排序算法。 冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法。在排序过程中,它会重复地交换相邻的元素,这是它名称的由来。 示例代码: c void bubble_sort(int arr[], int n) { for (int i = 0…

    数据结构 2023年5月17日
    00
  • JavaScript数据结构yocto queue队列链表代码分析

    JavaScript数据结构yocto queue队列链表代码分析 什么是队列? 队列(Queue)是一种基础的数据结构,属于线性结构,它的特点是在队列尾插入元素,同时在队列头删除元素,遵循先进先出(FIFO)的原则。队列可以简单的理解为排队,先到达的先被服务,而后到达的则等在队列尾排队等待。队列的应用非常广泛,例如排队系统、消息队列等。 队列的实现方式 队…

    数据结构 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部