数据结构【队列专题】

先进先出(First In First Out,FIFO)的线性序列,成为“队列”。

队列也是一种线性表,只不过它是操作受限的线性表,只能在两端操作:

一端进,一端出。进的一端成为队尾(rear),出的一端称为队头(front)。队列可以用顺序存储,也可以用链式存储。

循环队列 

#include <iostream>
using namespace std;
#define Maxsize 100typedef  struct SqQueue {int *base; //基地址int front, rear; //头指针,尾指针
}SqQueue;//循环队列的初始化
bool InitQueue(SqQueue &Q)//注意使用引用参数,否则出了函数,其改变无效
{Q.base = new int[Maxsize];//分配空间if (!Q.base) return false;Q.front = Q.rear = 0; //头指针和尾指针置为零,队列为空return true;
}//循环队列的入队
bool EnQueue(SqQueue &Q, int e)//将元素e放入Q的队尾
{if ((Q.rear + 1) % Maxsize == Q.front) //尾指针后移一位等于头指针,表明队满return false;Q.base[Q.rear] = e; //新元素插入队尾Q.rear = (Q.rear + 1) % Maxsize; //队尾指针加1return true;
}//循环队列的出队
bool DeQueue(SqQueue &Q, int &e) //删除Q的队头元素,用e返回其值
{if (Q.front == Q.rear)return false; //队空e = Q.base[Q.front]; //保存队头元素Q.front = (Q.front + 1) % Maxsize; //队头指针加1return true;
}//取循环队列的队头元素
int GetHead(SqQueue Q)//返回Q的队头元素,不修改队头指针
{if (Q.front != Q.rear) //队列非空return Q.base[Q.front];return -1;
}
//循环队列的长度
//如果Q.rear >= Q.front  长度为  Q.rear - Q.front
//如果Q.rear < Q.front  长度为 Q.rear - Q.front + Maxsize
//以上两者结合为下列公式,前者防负数,后者防正数
int QueueLength(SqQueue Q)
{return (Q.rear - Q.front + Maxsize) % Maxsize;
}int main()
{SqQueue Q;int n, x;InitQueue(Q);//初始化队列(一定要初始化,否则后面存储出错)cout << "请输入元素个数n:" << endl;cin >> n;cout << "请依次输入n个整型数,依次入队:" << endl;while (n--){cin >> x;EnQueue(Q, x);//入队}cout << endl;cout << "队列内元素个数,即长度:" << QueueLength(Q) << endl;cout << "队头元素:" << GetHead(Q) << endl;cout << "元素依次出队:" << endl;while (true)//如果栈不空,则依次出栈{if (DeQueue(Q, x))cout << x << "\t";//出队元素elsebreak;}cout << endl;cout << "队列内元素个数,即长度:" << QueueLength(Q) << endl;return 0;
}

单调队列

	//常见模型:找出滑动窗口中的最大值/最小值int hh = 0, tt = -1;for (int i = 0; i < n; i ++ ){while (hh <= tt && check_out(q[hh])) hh ++ ;  // 判断队头是否滑出窗口while (hh <= tt && check(q[tt], i)) tt -- ;q[ ++ tt] = i;}

详解单调队列算法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/335784.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件项目的命名规范/命名规则

文章目录项目名称目录名称包命名虚拟目录资源路径Java 代码命名属性文件 properties 命名xml文件命名jsp文件命名html文件命名js文件命名css文件命名图片文件命名数据库命名html标签的属性值命名规则项目名称 使用小串式命名法 项目名称使用英文&#xff0c;全部字母小写&…

数据结构【高精度专题】

// 高精度加法 // C A B, A > 0, B > 0 vector<int> add(vector<int> &A, vector<int> &B) {if (A.size() < B.size()) return add(B, A);vector<int> C;int t 0;for (int i 0; i < A.size(); i ){t A[i];if (i < B.size…

react java_独眼巨人React组织了Java 8库的寒武纪爆发

react java什么是独眼巨人React&#xff1f; Lambda表达式和默认方法在Java 8中的到来预示了Java语言十年来最大的结构性变化。 在此基础上构建了一些新的很酷的API&#xff0c;例如Stream, Optional, CompletableFuture最终Java开发人员可以以更实用的样式进行编码。 尽管这是…

oracle安装卡在create inventory_滴滴云服务器上安装Oracle12cR2单实例数据库

一、相关说明Oracle数据库是由美国甲骨文公司推出的一款优秀的关系型数据库。当前最新版为Database 19c。本文简述Oracle Database 12cR2在滴滴云主机上的安装过程。如需更权威的指导方法请参考Oracle官方安装文档。二、环境概述一台DC2云主机&#xff08;2c4g&#xff09;一个…

MyEclipse的build、clean、publish、clean(redeploy)的区别

文章目录buildcleanpublishclean(redeploy)新增了java文件或者修改了已有的java文件删除了java文件或者包修改了classes目录以外的文件build 就是将工程src目录的内容全新输出到工程的classes目录下&#xff0c;全面覆盖旧的文件&#xff0c;需要编译的会编译后再输出 clean …

jgroups_JGroups:无需额外基础架构的领导人选举

jgroups嗨&#xff0c;您好&#xff0c; 在本文中&#xff0c;我将展示如何在不使用任何其他基础架构&#xff08;例如Apache Zookeeper或Consul&#xff09;的情况下解决领导人选举的问题。 领导者选举是解决以下问题的一种常见方法&#xff1a;在分布式系统中&#xff0c;只…

【WebRTC---序篇】(二)Windows平台WebRTC源码编译

需要准备的东西 (一)一个强大的梯子(懂得都懂)!!!!!!!!! (二) 下载depot_tools Windows指定地址必须在此下载 打开这个页面,找 install depot_tools 这个关键字 请把他解压到C盘,并且设置到PATH环境变量种,且让它处于最顶端。 其他需要设置的额外变量 DEPOT_TOOLS_…

商品管理后台发布商品时,规格值组合的前端交互的实现逻辑

方案1&#xff1a;先计算总行数&#xff0c;再循环填充规格值 根据每种规格值数量计算得到总行数&#xff0c;如果下图有3种规格&#xff1a;长度、重量、大小&#xff0c;规格值个数分别为&#xff1a;3、3、2,3x3x218行。 规格种类有3种&#xff0c;于是写3层嵌套递归循环填…

python是什么牌子主机_python 收集主机信息

这篇文章是之前几篇的一个小综合。也是通过收集主机的一些参数信息&#xff0c;熟悉python里的文件读取&#xff0c;字符切割&#xff0c;字典存储等知识。文章结构&#xff1a;(1) 文章目的&#xff0c;需要收集的信息&#xff0c;并逐个分析如何获取信息。(2) 给出实现的pyth…

antlr idea 入门_ANTLR入门:构建简单的表达语言

antlr idea 入门这是该系列的第一篇文章。 本系列的目的是描述如何创建有用的语言和所有支持工具。 在本文中&#xff0c;我们将开始研究一种非常简单的表达语言。 我们将在语言沙箱中构建它&#xff0c;因此我们将其称为语言Sandy 。 我认为工具支持对于一种语言至关重要&am…

【WebRTC---源码篇】(五)WebRTC视频引擎

1. 视频数据的采集时间 2.视频分发器VideoBroadCaster

switch和toggle在软件开发中的含义和区别

switch和toggle这一对表示“切换”的单词&#xff0c;在计算机软件中我们能经常看到&#xff0c;很多时候口语中也会经常提及。但是&#xff0c;你想过它们之间有什么区别吗&#xff1f;没有区别&#xff1f;那你就大错特错了&#xff0c;区别还是很明显的&#xff0c;呵呵。 …

ios wkweb设置图片_iOS wkwebview和 uiwebview 内容图片自适应大小

- (void)webViewDidFinishLoad:(UIWebView *)webView {// 2、都有效果NSString *js"var script document.createElement(script);""script.type text/javascript;""script.text \"function ResizeImages() { ""var myimg,oldwidth;…

activiti异步执行_对基于消息队列的Activiti异步执行器进行基准测试

activiti异步执行一点历史 永无休止的一件事是&#xff0c;Activiti在某些非常大的规模的大型组织中的使用方式。 过去&#xff0c;这导致了各种优化和重构&#xff0c;其中包括异步执行器-替换旧的作业执行器。 对于未启动的用户&#xff1a;这些执行器在流程实例中处理计时器…

C++ 11 深度学习(十六)单例设计模式共享数据分析、解决,call_once

call_once std::call_once(参数一&#xff0c;参数二&#xff08;函数接口))的功能是保证一个函数只被调用一次&#xff0c;此方法具有互斥量的能力&#xff0c;并且消耗比互斥量少。此函数需要与标记std::once_flag配合使用&#xff0c;通过该标记决定函数是否调用&#xff0…

chrome浏览器设置网页快速到顶部和到底部的方法

鼠标移到浏览器的书签任意位置&#xff0c;点击鼠标右键添加书签&#xff0c;在添加书签的窗口输入名称和js代码&#xff0c;然后把书签移到浏览器书签栏的最左侧&#xff0c;这样每次浏览网页就可以使用快捷方式快速到底部或者顶部了。 快速到顶部的js代码&#xff1a;javascr…

ebp 函数堆栈esp_函数堆栈调用过程

从内存的角度详细的分析C语言中的函数调用过程&#xff1a;首先写一个测试用的代码&#xff1a;#include int add(int x, int y){int z 0;z x y;return z;}int main(){int a 1, b 2;int c 0;c add(a, b);return 0;}这是一个简单的的求和函数。其次&#xff0c;让我们确定…

apache pdfbox_Apache PDFBox命令行工具:无需Java编码

apache pdfbox在博客文章Apache PDFBox 2中 &#xff0c;我演示了将Apache PDFBox 2用作从Java代码中调用的库来操作PDF。 事实证明&#xff0c;Apache PDFBox 2还提供了可以直接从命令行直接使用的命令行工具 &#xff0c;而无需其他Java编码。 有几种命令行工具可用&#xff…

Java数组的学习

文章目录数组的声明和定义数组的特点如何使用数组数组的声明和定义 int[] ary new int[4] //动态初始化&#xff0c;长度4 int[] ary new int[]{1,2,3} //直接使用元素创建数组&#xff0c;也是动态初始化 int[] ary {1,2,3} //静态初始化// 数组变量的声明 int[] ary; in…

C++ 11 深度学习(十七)condition_variable、wait

简介 条件变量std::condition_variable的作用是阻塞线程&#xff0c;然后等待通知将其唤醒。我们可以通过某个函数判断是否符合某种条件来决定是阻塞线程等待通知还是唤醒线程&#xff0c;由此实现线程间的同步。所以简单来说condition_variable的作用就两个——等待(wait)、通…