当前位置:首页 > 技术分析 > 正文内容

数据结构与算法-队列

ruisui881个月前 (05-16)技术分析22

队列是一种常见的数据结构,它遵循先进先出(First-In-First-Out,FIFO)的原则。队列可以看作是一条排队等待的线性结构,新元素被添加到队列的尾部(rear),而从队列中移除元素则是从队列的头部(front)进行。

队列有两个基本操作:

入队列(push):

出队列(pop):

获取队列头部的元素(peek/front):

获取队列尾部的元素(rear/back):

判断队列是否为空(empty):

获取队列的元素个数(size):

队列可以有多种实现方式:

1. 数组实现:使用数组作为底层数据结构来实现队列。在数组中维护一个指向队列头部和尾部的指针,分别表示队列的起始位置和结束位置。入队操作将元素添加到尾部,出队操作将头部元素移除,并更新头部指针。这种实现方式简单直观,但在动态扩容时可能需要进行数据的搬移,时间复杂度较高。

2. 链表实现:使用链表作为底层数据结构来实现队列。每个节点包含一个元素和指向下一个节点的指针。入队操作将新节点添加到链表尾部,出队操作将头部节点移除,并更新头部指针。这种实现方式不需要进行数据的搬移,动态扩容比较方便,但需要额外的指针操作。

3.双栈实现:使用两个栈 F, S 模拟一个队列,其中 F 是队尾的栈,S 代表队首的栈,支持 push(在队尾插入),pop(在队首弹出)操作,入队列插入到栈 F 中,出队列,如果 S 非空,让 S 弹栈;否则把 F 的元素倒过来压到 S 中(其实就是一个一个弹出插入,做完后是首尾颠倒的),然后再让 S 弹栈。

选择队列的实现方式应根据实际需求和场景来确定,考虑到插入和删除操作的频率、对空间的要求以及是否需要支持动态扩容等因素。

// deque.cpp

// 编译运行
// g++ -g deque.cpp -o deque && ./deque

// 程序输出
// Queue top element: 1
// Queue not empty
// Queue element size: 2

#include <iostream>
#include <queue>

int main()
{
    std::queue<int> myQueue;

    // 入队操作
    myQueue.push(1);
    myQueue.push(2);
    myQueue.push(3);

    // 获取队列头部元素
    std::cout << "Queue top element: " << myQueue.front() << std::endl;

    // 出队操作
    myQueue.pop();

    // 判断队列是否为空
    if (myQueue.empty())
    {
        std::cout << "Queue empty" << std::endl;
    }
    else
    {
        std::cout << "Queue not empty" << std::endl;
    }

    // 获取队列大小
    std::cout << "Queue element size: " << myQueue.size() << std::endl;

    return 0;
}

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/4111.html

标签: js 队列
分享给朋友:

“数据结构与算法-队列” 的相关文章

10个实例小练习,快速入门熟练 Vue3 核心新特性(一)

作者:xuying 全栈修炼转发链接:https://mp.weixin.qq.com/s/_n2seDbbiO5hXQfuUGbUCQ前言Vue3.0 发 beta 版都有一段时间了,正式版也不远了,所以真的要学习一下 Vue3.0 的语法了。本篇文章总共分两部分,望小伙伴们认真阅读。下一篇:10...

vue3使用vue-router路由(路由懒加载、路由传参)

vue-router 是 vue的一个插件库1. 专门用来实现一个SPA单页面应用2 .基于vue的项目基本都会用到此库SPA的理解1) 单页Web应用(single page web application,SPA)2) 整个应用只有一个完整的页面3) 点击页面中的链接不会刷新页面, 本身也不会向...

三勾点餐系统java+springboot+vue3,开源系统小程序点餐系统

项目简述前台实现:用户浏览菜单、菜品分类筛选、查看菜品详情、菜品多属性、菜品加料、添加购物车、购物车结算、个人订单查询、门店自提、外卖配送、菜品打包等。后台实现:菜品管理、订单管理、会员管理、系统管理、权限管理等。 项目介绍三勾点餐系统基于java+springboot+element-plus+u...

原生微信小程序打包成安卓/IOS应用!#小程序开发

原生微信小程序打包成公。好消息,微信小程序可以直接打包成APP了你们知道吗?微信团队近日开发了一个多端开发平台。多端据文档描述,多端开发框架是支持使用小程序原生语法开发移动端应用的框架。开发者可以一次编码分别编译为小程序安卓以及iOS应用,实现多端开发。我们进入多端框架开发的文档,来看看怎么使用微信...

详解编程中的同步和异步

本文主要总结一些自己对异步的理解,话不多说 下面开始。一. 单线程 我们常说“JavaScript是单线程的”,所谓单线程,是指在JS引擎中负责解释和执行JavaScript代码的线程只有一个。不妨叫它主线程 但是实际上还存在其他的线程。例如:处理AJAX请求的线程、处理DOM事件的线程、定时器线程...

vue3 学习笔记 (二)——axios 的使用有变化吗?

本篇文章主要目的就是想告诉我身边,正在学 vue3 或者 准备学 vue3 的同学,vue3中网络请求axios该如何使用,防止接触了一点点 vue3 的同学会有个疑问?生命周期、router 、vux使用都改变了,那 axios 使用有没有啥改变?小姐姐使用 axios 之前,需要先安装好。yar...