队列的结构模型
先进先出

队列的实现:

为了实现队列,我们可以使用动态数组和指向队列头部的索引。
如上所述,队列应支持两种操作:入队和出队。入队会向队列追加一个新元素,而出队会删除第一个元素。 所以我们需要一个索引来指出起点。
代码如下:

#include <iostream>class MyQueue {private:// store elementsvector<int> data;       // a pointer to indicate the start positionint p_start;            public:MyQueue() {p_start = 0;}/** Insert an element into the queue. Return true if the operation is successful. */bool enQueue(int x) {data.push_back(x);return true;}/** Delete an element from the queue. Return true if the operation is successful. */bool deQueue() {if (isEmpty()) {return false;}p_start++;return true;};/** Get the front item from the queue. */int Front() {return data[p_start];};/** Checks whether the queue is empty or not. */bool isEmpty()  {return p_start >= data.size();}
};int main() {MyQueue q;q.enQueue(5);q.enQueue(3);if (!q.isEmpty()) {cout << q.Front() << endl;}q.deQueue();if (!q.isEmpty()) {cout << q.Front() << endl;}q.deQueue();if (!q.isEmpty()) {cout << q.Front() << endl;}
}

queue实现循环队列的实际用法:
题目:

题解:通过queue解法

class MovingAverage {
public:int n = 0;int sum = 0;queue<int> q;MovingAverage(int size) {n = size;}double next(int val) {if (q.size() == n)          //队列已满,队首出队,val从队尾入队{int tmp = q.front();q.pop();q.push(val);sum = sum - tmp + val;}else{q.push(val);sum += val;}//当队列未满时,长度是不足n的,取平均值时要除以队列的长度return (sum * 1.0) / min(n, (int)q.size());}
};

队列:先入先出的数据结构讲解相关推荐

  1. 队列 一种数据结构(多线程利器)

    # 队列 一种数据结构(多线程利器) import queue # 导入对列模块 q = queue.Queue() # 创建一个对列对象,先进先出 # q = queue.Queue(3) # 创建 ...

  2. 高级数据结构讲解与案例分析

    然而,仅仅掌握好它们不足以应付大厂的算法面试的.为了达到对时间和空间复杂度的理想要求,本节课探究高级数据结构,它们的实现要比那些常用的数据结构要复杂得多.其中重点介绍: 优先队列 图 前缀树 线段树 ...

  3. redis5种数据结构讲解及使用场景

    转载自  https://blog.csdn.net/qq_35568881/article/details/78779679 redis提供了5中数据结构,理解每种数据结构的特点对于redis开发运 ...

  4. 【久远讲算法】队列——先进先出的数据结构

    你好,我是久远,上次我们进行了关于栈的讲解,我们先来对知识进行回顾: 什么是栈 栈是有序集合,队列元素的增添和移除总是发生在同一端的,这一端我们称之为栈顶,另一端称之为栈底,栈中的元素离底端越近,代表 ...

  5. 常用数据结构讲解与案例分析

    数据结构是算法的基石,如果没有扎实的数据结构基础,想要把算法学好甚至融会贯通是非常困难的,而优秀的算法又往往取决于你采用哪种数据结构. 所以,接下来两节课的主题是,在算法面试中经常会被用到的数据结构以 ...

  6. Java实现单链表、栈、队列三种数据结构

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:远航 cnblogs.com/yang-guang- ...

  7. 可持久化数据结构讲解

    可持久数据结构主要指的是我们可以查询历史版本的情况并支持插入,利用使用之前历史版本的数据结构来减少对空间的消耗(能够对历史进行修改的是函数式). 在这里只讲下比较常用的可持久化线段树和trie. 对于 ...

  8. python环形队列_Python 实现数据结构-循环队列的操作方法

    今天我们来到了循环队列这一节,之前的文章中,我介绍过了用python自带的列表来实现队列,这是最简单的实现方法. 但是,我们都知道,在列表中删除第一个元素和删除最后一个元素花费的时间代价是不一样的,删 ...

  9. java循环队列_Java版-数据结构-队列(循环队列)

    前情回顾 在上一篇,笔者给大家介绍了数组队列,并且在文末提出了数组队列实现上的劣势,以及带来的性能问题(因为数组队列,在出队的时候,我们往往要将数组中的元素往前挪动一个位置,这个动作的时间复杂度O(n ...

最新文章

  1. 在ASP.NET中指定出错页面,不让代码外泄!
  2. [pyinstaller]PermissionError: [Errno 13] Permission denied:C:\Users\xxx\AppData\Local\ucrtbase.dll
  3. Linux下的帮助命令(man/help/info)
  4. Java程序员进阶的 3 个层次,你处于哪个?
  5. 【知识星球】分组卷积最新进展,全自动学习的分组有哪些经典模型?
  6. 用Axure开发的一个智能驾驶的app原型
  7. windows doc快捷键
  8. 计算机网络学习笔记(13. OSI参考模型①)
  9. 一篇文章带你大致了解5G关键技术、协议架构、网络优化覆盖、业务测试与验证
  10. 宝塔linux面板安全吗,宝塔面板 安全吗
  11. setTimeout()方法实现延时执行其他功能
  12. 3进制计算机发展,三进制计算机(中国三进制计算机)
  13. 计算机网络基础之数据交换技术
  14. ARM GCC浮点相关总结
  15. 数据导入与预处理——1.初步熟悉kettle-Spoon
  16. 用户注册登录页面的设计与实现
  17. python中各种属性与方法深析
  18. iphone 6plus 输出的屏幕尺寸 375 ,667的原因 - 简书
  19. 【宝藏级构建桌面应用程序】使用 JavaScript,HTML 和 CSS 构建跨平台的桌面应用程序
  20. 微信多开软件苹果版_微信PC版、无限多开、消息防撤回补丁

热门文章

  1. ubuntu 16.04 nfs服务的搭建
  2. AndroidStudio新建项目报错build failed
  3. POJ1734无向图求最小环
  4. UI基础控件创建(UILabel、UITextField、UIButton)
  5. 关于VC9和VC6以及Thread Safe和Non Thread Safe版本选择的问题
  6. linux系统开启多路径,Linux系统怎么配置多路径
  7. Mysql Exists与in_在MySQL里,有个和in一样的东东叫做exists,但是它比in更牛叉,你会么?...
  8. 4一20ma电流有源与无源区别_【知识分享】信号的有源与无源(2)
  9. java解析xml文件失败,在Java中解析大型XML文件时找不到文件异常
  10. 撸一串经典的detection tracking