Queue – 队列

一、队列的概述

队列(queue)是一种常见的, 先进先出 (FIFO, First-In-First-Out)的数据结构, 在队尾插入元素,在队头删除元素。

队列可以应用于: 线程任务调度、广度优先搜索、消息队列等场景,是一种非常重要的数据结构。

二、队列的实现

队列的实现可以基于链表(linked list)或数组(array)来实现,链表实现队列更加灵活方便,数组实现的队列有着更好的性能表现。

三、队列的操作

1、队列的初始化

    
        #include
        #include

        using namespace std;

        int main(){
            queue q; // 初始化一个空队列
            return 0;
        }
    

2、队列的插入操作

1) push()

在队列的末尾插入一个元素,时间复杂度为O(1)。

    
        queue q;
        q.push(1);    // 像队尾插入元素
        q.push(2);
        q.push(3);
    
2) emplace()

emplace()函数根据传入的参数构造一个新元素,将其插入队列的末尾。但emplace()与push()不同的是,emplace()避免了额外的构造函数和复制操作。

    
        struct Person{
            string name;
            int age;

            Person(string n, int a):name(n),age(a){}
        };

        queue q;
        q.emplace("Tom", 18);    // 在队列末尾插入一个Person类型的对象
    

3、队列的删除操作

1) pop()

队列的头部元素出队,时间复杂度为O(1)。

    
        queue q;
        q.push(1);
        q.push(2);
        q.push(3);
        q.pop();    // 弹出队头元素
    

4、队列的查询操作

1) front()

获取队列的头部元素,时间复杂度为O(1)。

    
        queue q;
        q.push(1);
        q.push(2);
        q.push(3);
        int x = q.front();    // 获取队头元素
    
2) empty()

判断队列是否为空,时间复杂度为O(1)。

    
        queue q;
        if(q.empty()){    // 判断队列是否为空
            cout << "Queue is empty." << endl;
        }
    
3) size()

返回队列中元素的个数,时间复杂度为O(1)。

    
        queue q;
        q.push(1);
        q.push(2);
        q.push(3);
        int n = q.size();    // 获取队列中元素个数
    

四、队列的应用场景

1、线程任务调度

在多线程编程中,通过队列来存储任务,从而实现任务的先进先出调度。

2、广度优先搜索

在图论算法中,广度优先搜索(Breadth First Search, BFS)就是通过队列实现的。

3、消息队列

在计算机网络中,消息队列(Message Queue)是一种异步通信机制,通过队列将消息从一个应用传递到另一个应用。

原创文章,作者:OHPJR,如若转载,请注明出处:https://www.506064.com/n/330622.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
OHPJROHPJR
上一篇 2025-01-16 15:46
下一篇 2025-01-16 15:46

相关推荐

  • Python中的队列定义

    本篇文章旨在深入阐述Python中队列的定义及其应用,包括队列的定义、队列的类型、队列的操作以及队列的应用。同时,我们也会为您提供Python代码示例。 一、队列的定义 队列是一种…

    编程 2025-04-29
  • RabbitMQ和Yii2的消息队列应用

    本文将探讨RabbitMQ和Yii2之间的消息队列应用。从概念、安装和配置、使用实例等多个方面详细讲解,帮助读者了解和掌握RabbitMQ和Yii2的消息队列应用。 一、Rabbi…

    编程 2025-04-29
  • Python queue长度用法介绍

    本文将从多个方面详细阐述Python queue长度问题,包括队列长度的定义、如何获取队列长度、队列满时如何处理以及常见的队列长度问题。同时,本文也会提供完整的Python代码示例…

    编程 2025-04-28
  • Java DelayQueue:实现延迟任务的线程安全队列

    一、DelayQueue的概述 Java的DelayQueue 是一个阻塞队列队列,主要用来实现对延迟任务的调度,也就是在指定的时间之后才能够取出任务来执行。该队列中保存的元素都必…

    编程 2025-04-23
  • Kafka死信队列详解

    一、死信队列是什么? 死信队列(Dead Letter Queue),简称DLQ,是一种用于缓存消息处理异常的队列,通常用于处理那些因为某种原因无法被消费者消费的消息。 在Kafk…

    编程 2025-04-12
  • Kafka 3.4 —— 大数据处理中的核心消息队列

    随着大数据和云计算时代的来临,消息队列作为重要的异步通信方式,成为了处理大量数据的关键之一。Kafka 3.4 作为大数据处理的中心组件,具有高可靠性、高吞吐量等特点,被广泛的应用…

    编程 2025-04-12
  • 深入理解freertos消息队列

    一、消息队列的概念和作用 消息队列是一种在任务之间传递信息的方式。FreeRTOS中的消息队列允许通过发送和接收消息来在任务之间进行通信,从而实现任务合作解决问题。 消息队列最大的…

    编程 2025-04-12
  • NSQ消息队列详解

    一、NSQ消息队列适用 NSQ是一个分布式消息传递平台,它是一个高效的、易于扩展的消息传递解决方案。由于其优异的性能和可靠的消息传递,NSQ消息队列被广泛应用于互联网应用程序、大数…

    编程 2025-02-24
  • RocketMQ延时队列详解

    一、延时队列介绍 延时队列,在分布式系统中经常被使用,可以很好的解决延迟任务问题。RocketMQ中提供了延时队列的功能。 二、RocketMQ延时队列实现 RocketMQ是通过…

    编程 2025-02-15
  • 深入掌握STL Queue

    STL中的queue是一个标准模板库容器,能够快速有效地存储和处理数据,是日常编程开发中非常常用的数据结构之一。本篇文章将从多个方面对STL queue进行详细的阐述。 一、基本概…

    编程 2025-02-05

发表回复

登录后才能评论