首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >堆栈还是不堆栈?

堆栈还是不堆栈?
EN

Stack Overflow用户
提问于 2009-05-19 09:02:04
回答 9查看 385关注 0票数 2

假设我有一个类似于Stack的数据结构,但除了通常的Push/Pop之外,它还具有PushAt/PopAt等函数,这两个函数都接受一个整数作为输入,并在数据结构中的该特定位置添加/返回该项。

现在Stack应该是后进先出的。这个数据结构是否符合"Stack“的要求?

EN

回答 9

Stack Overflow用户

发布于 2009-05-19 09:12:40

在HP RPN计算器和Postscript/PDF中,存在pushpop以外的其他运算符:

用于排列栈顶和下一个元素的

  • swapexch,作为swap

的扩展的

  • roll

它们的主要数据结构仍然被认为是一个堆栈。

pushAtpopAt只能使用pop/pushroll编写。因此您的数据结构仍然可以命名为stack。

票数 5
EN

Stack Overflow用户

发布于 2009-05-19 09:08:27

从技术上讲不是。后进先出的意思是(如你所知)后进先出。如果最后一个进入的元素不是第一个出来的,那么它就不满足堆栈的“语义接口”(或契约)。

但是,由于您似乎只是添加了额外的方法,而不是修改现有的方法,如果您的数据结构像堆栈一样使用,那么您的数据结构可以与堆栈互换使用,即pushAt()和popAt()永远不会被调用(例如,因为它们是通过将其作为Stack传递给函数来“隐藏”的)。

因此,从这个意义上讲,您的版本是一个堆栈,就像Java中的list是一个堆栈一样。它可以作为一个使用,但它也可以做其他事情。

票数 2
EN

Stack Overflow用户

发布于 2009-05-19 09:04:18

它不是一个堆栈,因为它不是后进先出的,你可以完全控制项目的get/set位置,它只是一个普通的列表imho。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/881685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档