首页 > 其他分享 >4月11日栈和队列

4月11日栈和队列

时间:2023-04-11 23:48:31浏览次数:38  
标签:11 顺序 优先级 日栈 队列 链表 数组 排序

栈与队列与之前的类都有所不同,他们类似于一个适配器,他们的实现时给一个给定的表加一定的限制或属性使其成为队列或者栈,

可以看到他们里面的成员变量就是一个容器,而插入和删除也都是对里面容器的尾删和插入等,但是要注意的是因为顺序表效率原因不支持头插,所以队列的容器也不能支持vector类。

在queue文件中有一个特殊的容器叫deque他不仅支持头插也支持排序和随机访问,那为什么vector和list还没有被她所取代呢,因为他虽然具有顺序表和链表的优点但是他又不能“精通”这些优点,因为他在随机访问上效率不如顺序表,又在任意位置插入时将空间利用的像链表那样淋漓尽致,所以他是一个很鸡肋的存在。

那么他的底层是如何实现的呢?

他的实现有点类似于希尔排序的思想,既然顺序头插需要挪动很多,那么我不如直接又一个个链接起来的数组组成,插入时只需要增加一个小数组,而随机访问时可以用数组的下标访问,但是这样重载迭代器和{}运算符很麻烦,于是就导致了他性能居于顺序表和链表之间。

他的迭代器有四部分组成分别是小数组的头和尾以及当前节点和当前小数组指针,然后经过复杂的函数来实现迭代器。

最后就是优先级队列了,这个队列在入队列后进行出队列时会将设定好的优先级优先输出,比如设定大数为优先级,那么他出队列一定是队列中最大的。

比如下面这个题:

给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。

请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

用优先级队列很容易解答,但是有一个缺点若是要处理的数据是海量数据那么,这样处理效率未免太低了,

我们可以用堆算法的思想去解决,建立一个有k个数的小堆,然后用优先级队列不断出堆和入堆,当处理完数据后堆里面就剩下最大的两个数了,此时再次出队列就能得到第k大的数,这样就可以避免不必要的排序资源浪费了

标签:11,顺序,优先级,日栈,队列,链表,数组,排序
From: https://www.cnblogs.com/qjwxlj/p/17308285.html

相关文章

  • 4.11日报
    今天进一步学习了神经网络,理解了损失函数,梯度以及通过调整权重和偏置来判断机器是否进行了学习(这里的学习直观意义来讲就是损失函数随着重复的迭代,越来越小,也就证明精度越来越高其次今天开了第一次团队会议,我们初步的计划是我(队长)负责前端的书写,然后我的两个队员,一个负责后端的深......
  • 2023-04-11 使用react-draft-wysiwyg插件进行图片插入后编写文字时抛出错误:Unknown Dr
    前言:react+antd+react-draft-wysiwyg文本编辑业务场景,当我点击插入图片时,在该图片上一行或下一行进行文字输入会报如下错误:报错:UnknownDraftEntitykey:null.未知的DraftEntitykey:null。原因:当你插入图片时,新的图片img需要被包裹在一个块级元素内就不会报错(这看起来并不是原......
  • Semi-prime H-numbers UVA - 11105
     所有形如4n+1(n为非负整数)的数叫H数。定义1是唯一的单位H数,H素数是指本身不是1,且不能写成两个不是1的H数的乘积。H-半素数是指能写成两个H素数的乘积的H数(这两个数可以相同也可以不同)。 例如,25是H-半素数,但125不是。输入一个H数h(h≤1000001),输出1~h之间有多少个H-半素数。......
  • 2023-04-11 无向图的匹配问题
    无向图的匹配问题之所以把无向图的这个匹配问题放到最后讲是因为匹配问题借鉴了有向图中一些算法的思想1最大匹配和完美匹配二分图回顾二分图:把一个图中的所有顶点分成两部分,如果每条边的两端分别属于不同部分,则这个图是二分图。更多二分图内容参考第4章二分图相关最大......
  • 每日总结 4.11
    今天进行了虚拟售卖机的页面规划和数据更新。学习了页面视频的实现,为之后的广告做准备。实现了两个虚拟售卖机的购买:  <%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><%@pageimport="toolse.Tll"%><%@pageimpor......
  • 2023.4.11——团队任务日报
    认领的工作任务:工作任务预估时间1.角色管理—教师身份(6.5h)2.调用接口,调用摄像头实现人脸识别(4h) ......
  • 4月11日leetcode练习
    设计一个支持push,pop,top操作,并能在常数时间内检索到最小元素的栈。实现MinStack类:MinStack()初始化堆栈对象。voidpush(intval)将元素val推入堆栈。voidpop()删除堆栈顶部的元素。inttop()获取堆栈顶部的元素。intgetMin()获取堆栈中的最小元素。 来源:力扣(Le......
  • 4.11号今日总结
    今日我们团队录制了服创团队第一次团队会议的视频,时常为39分钟.在这次会议中我们主要讨论了已经完成的一些功能以及后期需要实现的一些功能,我们四人团队积极发表了自己的想法,认领了各自的任务以及定制了每天需要实现的进度目标.......
  • 11-键盘录入笔记
    一,键盘录入涉及到的方法如下:​ next()、nextLine()、nextInt()、nextDouble()。1)next()、nextLine():可以接受任意数据,但是都会返回一个字符串。比如:键盘录入abc,那么会把abc看做字符串返回。​ 键盘录入123,那么会把123看做字符串返回。代码示例:Scannersc=newScanner(System.in);......
  • C++/ 4/11 学习内容
    空指针调用结构体中的成员函数const修饰成员函数,不能更改函数成员的值友元,让朋友可以访问本类的私有变量, *全局函数做友元*类做友元*成员函数做友元运算符重载:注意格式就ok还有<<这个输出时候的重载, 各种个样的函数重载,主要是为了方便,在主函数里面的实现......