当前位置: 首页 > wzjs >正文

flashfxp与Wordpress成都建站seo

flashfxp与Wordpress,成都建站seo,wordpress中标签作用,湖南网站设计费用引言: 上次我们学习了容器list的使用及其底层实现,相对来说是比较复杂的,今天我们要学习的适配器stack和queue与list相比就简单很多了,下面我们就开始今天的学习: 一:stack(后进先出&#xff…

引言:

上次我们学习了容器list的使用及其底层实现,相对来说是比较复杂的,今天我们要学习的适配器stackqueuelist相比就简单很多了,下面我们就开始今天的学习:

一:stack(后进先出)

1. 约定:

由于之前我们在数据结构初阶阶段已经了解过stack这个容器了,因此这里就不再具体来介绍了。

2. stack的介绍

stack的介绍文档

3. stack的使用

  1. stack(): 构造一个空栈。
  2. empty():判断栈是否为空。
  3. size():返回栈中的数据个数。
  4. top():返回栈顶数据。
  5. push():将元素压入栈中。
  6. pop():将栈顶元素弹出栈。

代码演示:

在这里插入图片描述

二:queue(先入先出)

1. 约定:

由于之前我们在数据结构初阶阶段已经了解过queue这个容器了,因此这里就不再具体来介绍了。

2. queue的介绍:

queue的介绍文档

3. queue的使用:

  1. queue(): 构造一个空队列 。
  2. empty(): 判断队列是否为空。
  3. size(): 返回队列中数据个数。
  4. push(): 将数据加入队列。
  5. pop(): 将队头数据出队。
  6. front(): 返回队头数据。
  7. back(): 返回队尾数据。

代码演示:

在这里插入图片描述

三:priority_queue

1. 约定:

这里的priority_queue就可以对比之前我们在数据结构初阶的时候学习的堆,因此这里的priority_queue也就不作具体介绍了。

2. priority_queue的介绍:

优先级队列默认使用vector作为其底层存储数据的容器,在vector上又使用了堆算法将vector中元素构造成堆的结构,因此priority_queue就是堆,所有需要用到堆的位置,都可以考虑使用priority_queue
默认情况下priority_queue是大堆 。
priority_queue的具体介绍文档

3. priority_queue的使用:

  1. priority_queue():构造一个空的堆。
  2. priority_queue(first,last): 用迭代器区间构造一个优先队列。
  3. empty(): 判断堆是否为空。
  4. top(): 返回堆顶数据。
  5. push(): 将数据入堆。
  6. pop(): 删除堆顶数据。

代码演示:

1. 普通构造:

在这里插入图片描述
注:这里的数据构成二叉树的话是满足大根堆的。

2. 迭代器构造:

在这里插入图片描述

3. 自定义实现大根堆、小根堆

对于内置类型的话:
如果这里我想要创建小根堆的话就需要自己传入仿函数来实现:
在这里插入图片描述

如果是自定义类型的话,创建大根堆小根堆都需要有相应的< >运算符重载,下面拿日期类来举例:
这是我们实现的一个日期类
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四:priority_queue 的模拟实现

1. 仿函数:

(1)定义:

仿函数(Functor),也称为函数对象(Function Object),是C++中通过重载operator()运算符的类或结构体,使其能够像函数一样被调用。

(2)形式:

注:我们这里的仿函数写成了模版的形式,契合泛型编程的思想,适用范围更广。
这是我们实现的一个小于的仿函数:
在这里插入图片描述
这是我们实现的一个大于的仿函数:
在这里插入图片描述

2. 基本框架:

注:这里我们是按照大根堆来实现的,想实现小根堆只需修改第三个参数即可。
在这里插入图片描述
注:这里的第二个参数container和第三个参数compare别忘了实例化。

3. 向上调整算法:

在这里插入图片描述

4. 向下调整算法:

在这里插入图片描述

5. 入堆:

在这里插入图片描述

6. 出堆:

在这里插入图片描述

7. 取堆顶:

在这里插入图片描述

8. 判空:

在这里插入图片描述

9. 求数据个数:

在这里插入图片描述

10. 测试:

在这里插入图片描述

五:容器适配器

1. 定义:

适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。

2. STL标准库中stack和queue的底层结构:

虽然stackqueue中也可以存放元素,但在STL中并没有将其划分在容器的行列,而是将其称为容器适配器,这是因为stackqueue只是对其他容器的接口进行了包装,STLstackqueue默认使用deque,比如:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到上面的这几个数据结构都是其他容器的封装。

3. deque(了解)

(1)原理介绍:

deque(双端队列):是一种双开口的"连续"空间的数据结构,双开口的含义是:可以在头尾两端进行插入和删除操作,且时间复杂度为O(1),与vector比较,头插效率高,不需要搬移元素;与list比较,空间利用率比较高。
在这里插入图片描述
deque并不是真正意义上的连续空间,而是由一段段连续空间连接起来的,类似于一个动态的二维数组。

其底层结构如下图:
在这里插入图片描述
它的底层实现比较复杂(不需要深入学习)

双端队列底层是一段假象的连续空间,实际是分段连续的,为了维护其“整体连续”以及随机访问的假象,这个责任就落在了deque的迭代器身上,因此deque的迭代器设计就比较复杂,如下图所示:
在这里插入图片描述
在这里插入图片描述

4. deque的缺陷:

vector比较,deque的优势是:头部插入删除时,不需要搬移元素,效率特别高,而且在扩容时,也不需要搬移大量的元素,因此其效率是比vector高的。
list比较,其底层是连续空间,空间利用率比较高,不需要存储额外字段。

但是,deque有一个致命缺陷:不适合遍历,因为在遍历时,deque的迭代器要频繁的去检测其是否移动到某段小空间的边界,导致效率低下,而序列式场景中,可能需要经常遍历,因此在实际中,需要线性结构时,大多数情况下优先考虑vectorlistdeque的应用并不多,而目前能看到的一个应用就是,STL用其作为stackqueue的底层数据结构。

5. 思考:为什么选择deque作为stack和queue的底层默认容器?

stack是一种后进先出的特殊线性数据结构,因此只要具有push_back()pop_back()操作的线性结构,都可以作为stack的底层容器,比如vectorlist都可以;queue是先进先出的特殊线性数据结构,只要具有push_backpop_front操作的线性结构,都可以作为queue的底层容器,比如list。但是STL中对stackqueue默认选择deque作为其底层容器,主要是因为:

  1. stackqueue不需要遍历(因此stackqueue没有迭代器),只需要在固定的一端或者两端进行操作。
  2. stack中元素增长时,dequevector的效率高(扩容时不需要搬移大量数据);queue中的元素增长时,deque不仅效率高,而且内存使用率高。结合了deque的优点,而完美的避开了其缺陷(不需要随机访问,避免了频繁调动[])。

六:stack的模拟实现

1. 基本框架:

在这里插入图片描述

2. 入栈:

在这里插入图片描述

3. 出栈:

在这里插入图片描述

4. 取栈顶:

在这里插入图片描述

5. 求栈中数据个数:

在这里插入图片描述

6. 判空:

在这里插入图片描述

7.测试:

在这里插入图片描述
在这里插入图片描述

七:queue的模拟实现:

1. 基本框架:

在这里插入图片描述

2. 入队:

在这里插入图片描述

3. 出队:

在这里插入图片描述

4. 取队头数据:

在这里插入图片描述

5.取队尾数据:

在这里插入图片描述

6. 求队列中数据个数:

在这里插入图片描述

7. 判空:

在这里插入图片描述

8. 测试:

在这里插入图片描述

完结!!!


文章转载自:

http://hvRb9xT3.qhmhz.cn
http://Q36qfwoh.qhmhz.cn
http://u4Nc7wPB.qhmhz.cn
http://xDkCcecv.qhmhz.cn
http://rzo0Gqld.qhmhz.cn
http://GenxDz9Q.qhmhz.cn
http://lqpg5uXH.qhmhz.cn
http://iqMTPOU1.qhmhz.cn
http://rWQBmopW.qhmhz.cn
http://Ygoyu3dW.qhmhz.cn
http://Iq0DTBM3.qhmhz.cn
http://ifPyuK7y.qhmhz.cn
http://tSzvlxiW.qhmhz.cn
http://YS80c8T8.qhmhz.cn
http://0x9liowv.qhmhz.cn
http://bqZpKI5v.qhmhz.cn
http://y3D3u1at.qhmhz.cn
http://4C8p9Qtr.qhmhz.cn
http://2kLd9OXj.qhmhz.cn
http://PVojKV4i.qhmhz.cn
http://EFr3IHqq.qhmhz.cn
http://77bQjjoh.qhmhz.cn
http://i22KoYgI.qhmhz.cn
http://3fjQS0rf.qhmhz.cn
http://D4vN3S1i.qhmhz.cn
http://K4urRENr.qhmhz.cn
http://eGsAyOel.qhmhz.cn
http://hHV4Rvg8.qhmhz.cn
http://87IiKmR6.qhmhz.cn
http://hL6DqZWs.qhmhz.cn
http://www.dtcms.com/wzjs/708159.html

相关文章:

  • 买了网站主机后如何建设网站苏州建设网站平台
  • 网站服务器购买用seo对网站做分析
  • 企业网站规划书范文自己的网站做怎样的优化调整
  • 电玩网站开发做兼职网站的主要参考文献
  • 南山医院网站建设山东机关建设网站道德模范
  • 美工网站设计收费猪八戒网站开发合同
  • 广西网站建设智能优化线上营销策划案例
  • 制作一个小型网站魔智科技logo在线设计
  • 建设厅网站贵州人事考试信息网wordpress做成仿阿里巴巴
  • 百度seo网站优化 网络服务云南财经大学网页设计作业
  • 青岛网站建设公司代理网络营销推广课程培训
  • 网站建设策划基本流程做室内效果图网站
  • 怎样优化网站案例青岛的互联网公司有哪些
  • 网站开发项目分析模板做一个旅游网站
  • 餐饮营销网站建设网站店铺的图片怎么做的
  • ftp中如何找到网站首页剪辑培训班
  • 网站统计插件简单网页制作模板图片
  • 建设厅安全证考试报名在哪个网站wordpress 本地头像
  • 免费建设微网站制作重庆发布微博
  • 遵义网站制作外包棋牌游戏网站模板
  • 网站开发量微信小程序里的网站怎么做
  • 电子商务网站建设期末题库河南教育平台网站建设
  • 龙岩任做网站的哪几个比较好网上做任务的网站
  • 购买网站模板怎么用建设部标准规范网站
  • 河北省保定市唐县城乡建设网站携程网站联盟
  • 电子商务网站的定义沈阳建设工程信息网举报
  • 做相册的网站(网易虚拟机wordpress教程
  • 重庆有哪些做网站 小程序的太原网站建设外包须知传媒
  • 免费网站是如何盈利的建设网站职业证书
  • 看电视剧免费的网站做刷网站流量犯法吗