队列、栈以及双端队列

引言

队列、栈和双端队列抽象程度更高,更能反应现实问题的情况,可以使程序员站在更高的角度思考、解决问题。

栈、队列和双端队列

共同点:都可以保存排列成行或列的数据。这些数据结构中存入数据的操作都是push,取出数据的操作都是pop,push和pop都是在O(1)时间里完成。

不同点
(1)队列queue:从一端存入数据,另一端取出数据。先存入的先被取出,先进先出FIFO(First in first out)。例如生活中的队伍,是这种类型。
(2)栈stack:只能从一段存入和取出数据。最后存入的先被取出,后进先出LIFO(Last in first out)。计算机中的函数调用,会用到栈的数据结构。
(3)双端队列dequeue:可以从两端存入和取出数据,这个特性可以实现栈和队列两种数据结构。

队列、栈以及双端队列的实现方法:
(1)利用链表实现:使用链表可以完成在常数时间内完成对两端的写入和删除操作,但在节点的分配和修改、更新指针的操作会耗费很多时间,因此这种方法不是特别高效。
(2)利用动态数组实现:栈只在一段进行数据的写入和删除,直接适用于动态数组。而实现队列和双端队列需要在前面插入和删除数据,动态数组中在前端插入和删除数据的时间花费是O(n),当然,,也可以对其做一些处理,把第一个元素和最后一个元素保存在head和tail中,前端取出元素就把head移动到下一个位置。其对内存空间的花费有点大,但也是可以优化的,具体优化方式就是将这个数组看作将动态数组的起始位置和结束位置相互连接,这种结构的数组叫做环形缓冲。
(3)标准库的实现:队列、栈和双端队列作为常用的数据结构,很多程序设计语言的标准库都支持。例如C++的STL中的queue、stack、deque就是这三个数据结构的库。

使用队列、栈和双端队列可以处理很多时间问题,应用十分便捷。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

三元湖有大锦鲤

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值