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

苏州app制作百度快照优化seo

苏州app制作,百度快照优化seo,湖南网站seo,高端网站有哪些优势博客主页:【夜泉_ly】 本文专栏:【C】 欢迎点赞👍收藏⭐关注❤️ 文章目录 💡双端队列简介1. 基本特性2. 与其他容器的比较与 vector与 list 3. 中控数组的设计4. 优缺点优点缺点 5. 应用场景6. 结论 💡双端队列简…

博客主页:【夜泉_ly】
本文专栏:【C++】
欢迎点赞👍收藏⭐关注❤️

在这里插入图片描述

文章目录

  • 💡双端队列简介
    • 1. 基本特性
    • 2. 与其他容器的比较
      • 与 `vector`
      • 与 `list`
    • 3. 中控数组的设计
    • 4. 优缺点
      • 优点
      • 缺点
    • 5. 应用场景
    • 6. 结论

💡双端队列简介

双端队列(deque)是一种特殊的容器,它允许在两端进行插入和删除操作。
虽然它的名称中有“队列”二字,但它的行为并不完全符合传统队列的先进先出(FIFO)原则,因此严格来讲,双端队列不是队列。
下面将介绍双端队列的特性、与其他容器的比较、以及它的应用场景。

1. 基本特性

双端队列是一种支持在头部和尾部同时进行插入和删除操作的容器。

在这里插入图片描述
观察它的接口,可以看见它的接口设计允许:

  • 头部和尾部进行高效的插入和删除操作。
  • 进行随机访问,支持通过下标访问任意元素。

⭕虽然 deque 看起来非常灵活且功能强大,但在实际使用中,仍需对其存在的潜在问题保持警惕。
这也解释了为什么许多数据结构书籍更多地介绍列表(list)和向量(vector),而不单独强调双端队列。

2. 与其他容器的比较

首先来回顾一下顺序表和链表的区别:

特性链表(list)顺序表(vector)
可任意位置插入删除否(头、中部插入效率低)
按需申请释放需处理扩容问题
支持随机访问是(可用下标随机访问)

vector

  • 插入和删除效率
    deque 在头部和尾部的插入和删除操作效率较高,而 vector 在这些操作中性能较差。
  • 扩容问题
    扩容方面,deque更优秀。
    vector 在扩容时需要将所有数据拷贝到一个新数组中,然后释放旧的数组,这在元素较多时会造成性能损失。
    相比之下,deque 使用多个小数组,扩容时只需添加新的数组,避免了大规模的数据拷贝。
  • 随机访问
    vector的效率更高。因为双端队列随机访问时要计算位置。

list

  • 插入和删除效率
    list更优秀。
    deque 在头部和尾部的插入和删除操作效率较高,而在中间插入删除性能较差。因为需要保证小数组的长度,不能直接扩容,以免加大随机访问时的计算量,大大降低随机访问的效率。
  • 扩容问题
    扩容方面,deque更优秀。
    list虽然不会浪费空间,但大量分散的节点会让内存碎片化。而deque使用小数组极大改善了这个问题。
  • 随机访问
    deque更优。因为list根本不支持随机访问🤣。

双端队列在一定程度上结合了两者的优点,允许在两端高效插入和删除,同时也支持下标随机访问。但是在单方面上不如两者极致。

3. 中控数组的设计

deque 的实现中,数据通常是以多个小数组的形式存储。这些小数组被一个称为中控数组(或指针数组)的结构连接在一起。中控数组从中间位置开始放置小数组,提供了更灵活的内存管理。由于中控数组只存储小数组的指针,扩容时只需拷贝指针,避免了移动实际数据的开销。

4. 优缺点

优点

  • 高效支持头部和尾部的插入与删除。
    在这里插入图片描述

  • 随机访问性能良好,适合频繁需要访问数据的场景。

    小数组长度固定,计算位置时,先减去头或尾数组的数据个数,然后一除就能得到位置。

  • 适合用作 stackqueue 的默认容器。C++ -stack、queue

    适合用于需要频繁在两端插入和删除数据的场景

缺点

  • 在中间位置插入或删除操作的效率较低,因为 deque 不支持单独小数组的大小调整。
  • 随机访问时的计算不如 vector 高效。

    但如果数据量较小其实还好。

下面这段代码,对vectordeque进行排序,用于比较vectordeque在随机访问的效率上的区别:

void TestOP()
{srand(time(0));const int N = 10000000;vector<int> v;deque<int> dq;for (int i = 0; i < N; ++i){int tmp = rand();v.push_back(tmp);dq.push_back(tmp);}int begin1 = clock();sort(v.begin(), v.end());int end1 = clock();int begin2 = clock();sort(dq.begin(), dq.end());int end2 = clock();printf("vector:%d\n", end1 - begin1);printf("deque:%d\n", end2 - begin2);
}
int main()
{TestOP();return 0;
}

运行结果如下图:
在这里插入图片描述
可以看到,在数据量较大时,deque随机访问的效率不如vector

5. 应用场景

由于其灵活性和效率,deque 特别适合用于需要频繁在两端插入和删除数据的场景,因此,它是实现栈和队列的一个理想容器,提供了在高频数据操作时的良好性能。
这就是为什么,库中stackqueue的默认容器是deque
在这里插入图片描述

在这里插入图片描述

6. 结论

双端队列是一种强大且灵活的数据结构,能够在多种情况下满足开发者的需求。尽管它在特定情况下可能不如列表和向量广泛使用,但了解其特性和应用场景,可以帮助开发者在设计高效算法时做出更明智的选择。
在这里插入图片描述


希望本篇文章对你有所帮助!并激发你进一步探索编程的兴趣!
本人仅是个C语言初学者,如果你有任何疑问或建议,欢迎随时留言讨论!让我们一起学习,共同进步!

http://www.shuangfujiaoyu.com/news/45394.html

相关文章:

  • apache建立多个网站成都私人做网站建设
  • 网站建设的搜索栏怎么设置网站优化 秦皇岛
  • 日本人做鸭网站搜索引擎营销的内容和层次有哪些
  • PHP做的网站能容纳多少人信息推广平台有哪些
  • 如何做好品牌网站建设cba最新积分榜
  • 专门做网站的公司有哪些郑州网站排名推广
  • 陕西省建设教育培训网福州短视频seo
  • 开平做网站河南智能seo快速排名软件
  • 重庆独立站设计制作免费建设网站平台
  • 包装设计的意义广东优化疫情防控措施
  • 网站开发的ppt报告网络营销竞价推广
  • 仿win8 网站模版谷歌浏览器网页版入口手机版
  • 太原seo网站建设做引流推广的平台600
  • 接做网站私活百度游戏风云榜
  • 宁夏企业网站建设外链相册
  • 比较有逼格的网站免费网站推广群发软件
  • 网站制作方案介绍及要求企业网络推广计划书
  • 做优化的网站网站建设的重要性
  • 做网站的主要作用网站建设服务商
  • 购买域名后如何使用seo研究院
  • 网站后台模板html5排名优化推广
  • 珠海网站建设 金碟网络营销推广方法
  • 如何做自适应网站seo外链工具有用吗
  • 蛋糕网站建设方案百度扫一扫识别图片
  • 企业网站制作优化浏览器老是出现站长工具
  • html 门户网站定制网站开发公司
  • 化妆品网站建设规模设想seo网站关键词优化机构
  • 足球亚洲排名最新排名广西seo快速排名
  • 莱芜营销型网站制作好f123网站
  • 太原便宜做网站的公司女教师遭网课入侵直播录屏曝光8