应用、优势和缺点的双端队列

应用、优势和缺点的双端队列

Deque或双端队列是一种顺序线性收集数据队列,提供类似于双端队列的功能。在此数据结构中,该方法不遵循先进先出(FIFO)规则进行数据处理。这种数据结构也称为双端队列,因为元素插入到队列的末尾并从前面删除。对于双端队列,我们​​只能从两端添加和删除数据。双端队列操作的时间复杂度为O(1)。有两种类型的双端队列 –

输入受限

单端输入限制。

允许从两端删除数据。

输出受限

单端输出限制。

允许向两端插入数据。

以下命令可帮助编码人员使用双端队列上的数据集池执行各种操作 –

push_back() – 从双端队列的后面插入一个元素。

push_front() – 从双端队列的前面插入一个元素。

pop_back() – 从双端队列后面删除元素。

pop_front() – 从双端队列的前面删除元素。

front() – 返回双端队列前面的元素。

back() – 返回双端队列后面的元素。

at() – 设置/返回指定索引处。

size()-返回元素的数量。

empty() – 如果双端队列为空,则返回 true。

在循环数组中我们可以使用双端队列操作。如果数组已满,那么我们可以从头开始该过程。但对于线性数组,如果数组已满,则无法插入更多数据。然后我们可以看到一个“溢出弹出窗口”。

双端队列的应用

Deque 有很多实时应用程序可供使用。

用于作业调度应用程序。

在 O(1) 时间内我们可以执行顺时针和逆时针旋转操作。

双端队列算法也存在于网络浏览器历史记录中。

用于排序中的撤消操作。

双端队列的优点

Deque 有很多优点。

我们可以从正面和背面添加和删除数据。

它们的大小是动态的。

Deque 提供了执行操作的高效时序。

此处使用了 LIFO 堆栈。

此处无法重新分配。

这是一个具有适当同步的线程安全进程。

缓存友好。

双端队列的缺点

双端队列的缺点是

Deque进程内存消耗率较高。

它存在多线程同步问题。

无法在所有平台上实现。

不适合实现排序操作。

Deque 的功能较少。

双端队列操作的算法

第 1 步 – 考虑一个大小为 n 的双端队列数组。

第 2 步 – 将两个指针设置为“front=-1”(表示 front)和“rear=0”(表示 set)。

这个过程有很多子部分。在双端队列中我们可以执行多个操作。我们在这里总结了它们。

在双端队列中从前面插入数据的算法:-

第 1 步 – 检查前面的位置。

第 2 步 – 如果“front

第 3 步 – 否则,我们需要将“front”减少 1。

第 4 步 – 将新的键元素添加到数组的前面位置。

在双端队列后面插入数据的算法:-

第 1 步 – 检查阵列是否已满。

第 2 步 – 如果已满,则应用“rear=0”。

第 3 步 – 否则,将“rear”的值增加 1。

第 4 步 – 再次将新键添加到“array[rear]”中。

从双端队列前面删除数据的算法:-

第 1 步 – 检查双端队列是否为空。

第 2 步 – 如果列表为空(“front=-1”),则为下溢条件,无法进行删除。

步骤 3 – 如果双端队列中只有一个元素。然后“front=rear=-1”。

第 4 步 – 否则,“front”位于末尾,然后设置为“front=0”。

第 5 步 – 否则,front=front+1。

从双端队列后面删除数据的算法:-

第 1 步 – 检查双端队列是否为空。

步骤 2 – 如果为空(“front=-1”),则无法执行删除。这是下溢条件。

第 3 步 – 如果双端队列只有一个数据,则“front=rear=-1”。

第 4 步 – 否则,请按照以下步骤操作。

步骤 5 – 如果后部位于前面“后部=0”。转到前面“rear = n-1”。

第 6 步 – 否则,rear=rear-1。

检查双端队列是否为空的算法:-

第 1 步 – 如果 front=-1,则双端队列为空。

检查双端队列是否已满的算法:-

步骤 1 – 如果前=0 且后= n-1

第 2 步 – 或者,front=rear+1

双端队列的语法

deque deque_name;deque deque1 = {11, 21, 31, 41, 51};deque deque2 {10, 20, 30, 40, 50};

登录后复制

在数据结构中,双端队列继承了堆栈和队列的一些属性。在 C++ 中,双端队列被实现为向量的向量。

使用双端队列的各种方法的处理

方法 1 – 以一般方式实现双端队列

方法 2 – 将元素插入双端队列

方法 3 – 从双端队列访问元素

方法 4 – 更改双端队列的元素

双端队列的一般实现

在此 C++ 构建代码中,我们以通用方式配置了双端队列操作。在这个例子中,我们在队列的后端插入了一个元素,整个系统就是按照这种方式执行的。

示例 1

#include using namespace std;#define MAX 10class Deque {   int arr[MAX];   int front;   int rear;   int size;   public:   Deque(int size) {      front = -1;      rear = 0;      this->size = size;   }   void insertfront(int key);   void insertrear(int key);   void deletefront();   void deleterear();   bool isFull();   bool isEmpty();   int getFront();   int getRear();};bool Deque::isFull() {   return ((front == 0 && rear == size - 1) ||      front == rear + 1);}bool Deque::isEmpty() {   return (front == -1);}void Deque::insertfront(int key) {   if (isFull()) {      cout 

登录后复制

输出

insert element at rear end rear element: 11after deletion of the rear element, the new rear element: 5insert element at front end front element: 8after deletion of front element new front element: 5

登录后复制

将元素插入双端队列

在此代码中,我们尝试创建 C++ 代码以将元素插入双端队列。有两种方法可以执行此操作。

push_back() – 在数组末尾插入元素。

push_front() – 在数组的开头插入元素。

示例 2

#include #include using namespace std;int main() {   deque nums {16, 7};   cout 

输出

Initial Deque As We Give: 16, 7, Final Deque Is Here: 1997, 16, 7, 2001,

登录后复制

从双端队列访问元素

我们可以使用两种方法访问双端队列中的元素。

front() - 在前面我们可以获得返回值。

back() - 返回后面的数据。

at() - 从指定索引返回。

#include #include using namespace std;int main() {   deque nums {16, 07, 10};   cout 

输出

Front element are here: 16Back element are here: 10Element at index 1 present here: 7Element at index 0 present here: 16

登录后复制

更改双端队列的元素

在此代码中,我们可以使用 at() 方法来替换或更改该特定双端队列的元素。

示例 4

#include #include using namespace std;int main() {   deque nums = {07,16,10,1997,2001};   cout 

输出

Initial Deque: 7, 16, 10, 1997, 2001, Updated Deque: 2022, 5, 10, 1997, 2001,

登录后复制

结论

通过这篇文章,我们了解了双端队列,它的操作方法、应用、优缺点以及算法和使用C++可能的代码。

以上就是应用、优势和缺点的双端队列的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2583343.html

(0)
上一篇 2025年3月6日 14:32:43
下一篇 2025年2月25日 06:03:45

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • C语言与其他编程语言的比较:优势和限制分析

    C语言与其他编程语言的比较:优势和限制分析 概述: 在计算机科学领域中,编程语言被广泛使用来编写软件和开发应用程序。不同的编程语言有不同的特点和优势。而在这些编程语言中,C语言是一种被广泛使用和熟知的语言之一。本文将探讨C语言与其他主要编程…

    2025年3月6日
    200
  • 重要性及应用领域:C语言程序设计

    C语言是一种高级编程语言,广泛应用于计算机科学与技术领域。它以其高效、灵活、可移植等特点,成为程序设计的重要工具。本文将介绍C语言程序设计的重要性和应用领域。 首先,C语言的重要性体现在其在计算机科学与技术领域的广泛应用。C语言是许多其他编…

    2025年3月6日
    200
  • 删除iPhone中缺少的应用程序选项:修复

    iphone上的某些应用程序是否缺少“删除应用程序”选项?此“删除应用程序”功能不适用于本机 ios 应用程序。因此,您不会在iphone上找到相机,联系人或其他本机应用程序的“删除应用程序”选项。但是,如果您找不到其他应用程序的“删除应用…

    2025年3月6日 互联网
    200
  • C++ 容器库在大型项目中的应用策略

    在大型项目中选择 c++++ 容器库的原则:考虑数据类型:选择与数据类型匹配的容器,例如,vector 适用于连续数据。评估性能要求:选择满足性能需求的容器,例如,unordered_set 适用于需要快速插入和删除的场景。注重可维护性:选…

    2025年3月6日
    200
  • iPhone应用程序未更新:这是修复程序

    无法更新 iphone/ipad 上的应用程序?每个应用程序都需要在服务中的某个时间点进行更新,以在应用程序中引入新功能或修补错误。因此,如果您无法更新 iphone 中的应用程序,则有可能在某个时间点后无法使用该应用程序。因此,您应该调查…

    2025年3月6日 互联网
    200
  • 应用程序无法在iPhone上加载:如何修复

    您的 iphone 上没有加载应用程序?如果一个应用程序需要很长时间才能加载,这是不正常的。除了仍处于测试阶段的应用程序外,当您在 iphone 上打开它们时,它们应该会立即加载。除了一些重度游戏外,如果您手机上的所有应用程序加载缓慢或根本…

    2025年3月6日 互联网
    200
  • C++框架的优势与劣势

    优势:提高生产力:预建模块,节省开发时间。代码重用:组件可跨项目使用,提高可读性和可维护性。抽象复杂性:隐藏底层实现,简化开发。一致性:强制执行编码风格和最佳实践。社区支持:提供调试和问题解决帮助。劣势:性能开销:管理组件和内存分配增加额外…

    2025年3月6日
    200
  • Gin框架中的会话管理及其应用

    gin框架是一种轻量级的web框架,它采用go语言开发,并且具有高效性、易用性、灵活性等优点。在web应用开发中,会话管理是一个非常重要的话题,它可以用于保存用户信息、验证用户身份、防止csrf攻击等。本文将介绍gin框架中的会话管理机制以…

    编程技术 2025年3月6日
    200
  • Gin框架的配置文件解析器详解及其应用

    gin是一款基于go语言的轻量级web应用框架,在web开发中很受开发者的欢迎。其中一个很重要的原因是gin提供了丰富的中间件,使得开发web应用变得更加高效和方便。在gin中,配置文件的使用也十分常见,本篇文章将详细介绍gin框架的配置文…

    编程技术 2025年3月6日
    200
  • 了解Beego的特性和优势,开启Go编程之旅

    随着互联网的发展和应用场景的不断扩大,web开发也日趋重要。而go语言作为一门同时拥有高效性和可维护性的编程语言,越来越受到越来越多开发者的青睐。而beego作为一个开源的web框架,成为越来越多go语言开发者的首选。在这篇文章中,我们将深…

    编程技术 2025年3月6日
    200

发表回复

登录后才能评论