我知道典型的队列/链表实现中的push()和pop()方法是如何工作的,但我想知道的是您实际定义为push还是pop型的是什么?什么时候可以将方法命名为push()/pop()?是什么使得典型的树实现中的insert()/add()方法不是push()?
我的理解是push()意味着将某些东西放到某个特定指针所指向的位置,而pop()ping一个元素意味着将某个指针所指向的对象放在一边,但它似乎没有明确的定义。或者命名有关系吗?
发布于 2010-05-11 02:04:33
当引用链接列表上的操作时,您可以将项推送到列表上以添加它们。然后,您可以从列表中弹出项目以将其删除。
如果从添加项目的列表的同一末尾弹出项目,则已实现堆栈或后进先出(LIFO)数据结构:

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

发布于 2010-05-11 02:07:05
术语推送和弹出通常用于stacks,而不是queues或linked lists。堆栈是一种后进先出(LIFO)数据结构;换句话说,首先要删除的是最近添加的项。推送是当你将一个新项目放到堆栈上时,而弹出是当你取下它时。
许多编程语言将允许您以任何您想要的方式编写代码,包括对任何和所有数据结构使用推送和弹出名称,即使这不是您真正要做的。然而,我不建议你这么做。最好使用其他人使用的术语,这样其他程序员就可以阅读您的代码。此外,使用错误的术语可能会让你很难找到工作,如果你正在处理一个项目(工作或开源),也会让你很难与其他程序员沟通。
发布于 2010-05-11 02:03:07
推送意味着将一个项目放到堆栈(数据结构)上,以便它成为堆栈最顶层的项目。Popping意味着从堆栈中移除最上面的项。(你经常听到第三个术语,peeking,意思是看/读最上面的项目。)
当涉及到队列时,您通常应该改用术语enqueueing和dequeueing,前者表示将项附加到队列的“后端”,后者表示从队列中删除“前端”处的项。
这些定义表明,堆栈(如果你在脑海中想象它)在空间上是垂直的,而队列是水平的。另一个不同之处在于,堆栈上的操作始终发生在同一端,而队列上的操作发生在相反的两端。
当涉及到链表和双端队列(deques)时,术语push和pop也被使用,例如在C++的STL中,你有push_front,push_back,pop_front和pop_back这样的操作,这些仅仅意味着项可以在两端被追加或删除。
至于为什么叫pop,而不是pull (vs. push)...问得好。
https://stackoverflow.com/questions/2805102
复制相似问题