首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >push()和pop()ping是如何定义的?

push()和pop()ping是如何定义的?
EN

Stack Overflow用户
提问于 2010-05-11 01:59:34
回答 13查看 34.5K关注 0票数 13

我知道典型的队列/链表实现中的push()和pop()方法是如何工作的,但我想知道的是您实际定义为push还是pop型的是什么?什么时候可以将方法命名为push()/pop()?是什么使得典型的树实现中的insert()/add()方法不是push()?

我的理解是push()意味着将某些东西放到某个特定指针所指向的位置,而pop()ping一个元素意味着将某个指针所指向的对象放在一边,但它似乎没有明确的定义。或者命名有关系吗?

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2010-05-11 02:04:33

当引用链接列表上的操作时,您可以将项推送到列表上以添加它们。然后,您可以从列表中弹出项目以将其删除。

如果从添加项目的列表的同一末尾弹出项目,则已实现堆栈或后进先出(LIFO)数据结构:

如果您从相反的一端弹出项目,那么您已经实现了一个队列-尽管通常术语是“入队”和“出队”。这是一个先进先出(FIFO)数据结构:

票数 38
EN

Stack Overflow用户

发布于 2010-05-11 02:07:05

术语推送和弹出通常用于stacks,而不是queueslinked lists。堆栈是一种后进先出(LIFO)数据结构;换句话说,首先要删除的是最近添加的项。推送是当你将一个新项目放到堆栈上时,而弹出是当你取下它时。

许多编程语言将允许您以任何您想要的方式编写代码,包括对任何和所有数据结构使用推送和弹出名称,即使这不是您真正要做的。然而,我不建议你这么做。最好使用其他人使用的术语,这样其他程序员就可以阅读您的代码。此外,使用错误的术语可能会让你很难找到工作,如果你正在处理一个项目(工作或开源),也会让你很难与其他程序员沟通。

票数 8
EN

Stack Overflow用户

发布于 2010-05-11 02:03:07

推送意味着将一个项目放到堆栈(数据结构)上,以便它成为堆栈最顶层的项目。Popping意味着从堆栈中移除最上面的项。(你经常听到第三个术语,peeking,意思是看/读最上面的项目。)

当涉及到队列时,您通常应该改用术语enqueueingdequeueing,前者表示将项附加到队列的“后端”,后者表示从队列中删除“前端”处的项。

这些定义表明,堆栈(如果你在脑海中想象它)在空间上是垂直的,而队列是水平的。另一个不同之处在于,堆栈上的操作始终发生在同一端,而队列上的操作发生在相反的两端。

当涉及到链表和双端队列(deques)时,术语pushpop也被使用,例如在C++的STL中,你有push_frontpush_backpop_frontpop_back这样的操作,这些仅仅意味着项可以在两端被追加或删除。

至于为什么叫pop,而不是pull (vs. push)...问得好。

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

https://stackoverflow.com/questions/2805102

复制
相关文章

相似问题

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