【考研复习】《算法导论》第十章 基本数据结构 10.1-5 双端队列的简易实现

本文介绍了《算法导论》中关于双端队列的理论概念,并提供了使用数组实现的四个O(1)时间复杂度的插入和删除操作,包括在两端的高效操作示例。同时,伪代码展示了如何在双端队列deque中进行头尾操作,避免下溢错误。

题目在《算法导论》机械工业出版社 中文版 第三版 P131 10.1-5

题目描述

题目描述:
栈插入和删除元素只能在同一端进行,队列的插入和删除操作分别在两端进行,与它们不同的是有一种双端队列(deque),其插入和删除都可以在两端进行。
写出4个时间均为O(1)的过程,分别实现在双端队列的两端插入和删除元素的操作,该队列是用一个数组来实现的。

双端队列的概念:

  1. 双端队列是一个限定插入和删除操作的数据结构,具有队列和栈的性质。
  2. 双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。
  3. 双端队列是指允许两端都可以进行入队和出队操作的队列,其元素的逻辑结构仍是线性结构。将队列的两端分别称为前端和后端,两端都可以入队和出队。
  4. 如果限定双端队列从某个端点插入的元素只能从该端点删除,则该双端队列就蜕变为两个栈底相邻的栈了。

简易实现

根据概念,我做了简单的实现:
在这里插入图片描述
如图,先只考虑左侧进出,右侧是对称的,可以类比。
让head虚指,进而当插入时可以直接将元素x放入指向的位置,然后左移head即可。
当出队时,让head先自增,再将指向的4出队即可。
值得注意的是,当head-tail==1时,此时deque中没有元素,需要抛出下溢 异常
伪代码实现如下:

addHead(x):
      Deque[head--]=x;             //一句代码完成先填值,再移动指针
addTail(x):
      Deque[tail++]=x;
      
popHead():
      if(head-tail == 1)
         throw "deque underflow"
      return Deque[++head];      //一句代码完成先移动指针,再出队。
 popTail():
      if(head-tail == 1)
         throw "deque underflow"
      return Deque[--tail];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

农民真快落

我琢磨着也没人给我打赏呀。。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值