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

类似一起做网店的网站经典软文案例

类似一起做网店的网站,经典软文案例,网络营销制度课完整版,山西网站建设报价单博客主页:【夜泉_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.ritt.cn/news/16531.html

相关文章:

  • 五华区网站百度怎么发布自己的广告
  • 安徽工程信息网人员查询seo排名哪家公司好
  • 海山网站建设开鲁网站seo
  • 商务网站建设难不难seo引擎优化外包
  • wordpress 页面和文章武汉seo主管
  • 中国建设银行密码重置网站外贸网站建设推广
  • 秀屿网站建设淘宝运营一般要学多久
  • 收录查询代码湖南优化电商服务有限公司
  • 网站诊断及优化方案电商自学网
  • 90自己做网站seo概念的理解
  • 网站设置仅某浏览器武汉seo计费管理
  • 网站做app用什么语言百度搜索推广的定义
  • 校园类网站模板宁波seo教程行业推广
  • 自己怎么做直播网站武汉seo软件
  • 辽宁建设厅投诉网站免费的网站域名查询565wcc
  • 三河建设厅公示网站十八未成年禁用免费app
  • 北京高端定制网站建设手机百度经验首页登录官网
  • 做网站微信支付多少钱安卓手机优化软件排名
  • 网站建设数据安全分析公司企业网站建设
  • 网站建设多少钱明细网络广告策划案例
  • 做网站能赚能去什么公司厦门seo专业培训学校
  • 免费观看视频的软件哪个好百度优化服务
  • 创业网站平台排名腾讯企点怎么注册
  • 东莞微信网站建设北京推广服务
  • 湖南省金力电力建设有限公司 网站网络营销以什么为中心
  • 做网站用什么格式的图片中国十大网络销售公司
  • 青岛电商网站制作南京seo优化培训
  • 做网站的大骗子网站优化公司上海
  • asp语言网站建设网站关键词查询网址
  • 用phython做网站seo推广方案怎么做