Data structures push()ping和pop()ping是如何定义的?
我知道push()和pop()方法在队列/链表的典型实现中是如何工作的,但我想知道的是您实际定义为push还是pop?什么时候可以命名方法push()/pop()?是什么使典型树实现中的insert()/add()方法不是push()Data structures push()ping和pop()ping是如何定义的?,data-structures,definition,Data Structures,Definition,我知道push()和pop()方法在队列/链表的典型实现中是如何工作的,但我想知道的是您实际定义为push还是pop?什么时候可以命名方法push()/pop()?是什么使典型树实现中的insert()/add()方法不是push() 我的理解是,push()ping意味着将某个特定的指针指向某个位置,而pop()ping元素意味着将某个指针指向的某个对象放到另一个位置,但它似乎没有明确定义。还是说名字很重要 Push/Pop最初与asm land中的堆栈命令相关。推送在堆栈上放置一个值(寄存器
我的理解是,push()ping意味着将某个特定的指针指向某个位置,而pop()ping元素意味着将某个指针指向的某个对象放到另一个位置,但它似乎没有明确定义。还是说名字很重要 Push/Pop最初与asm land中的堆栈命令相关。推送在堆栈上放置一个值(寄存器)并更新堆栈指针,而pop从堆栈中获取值并减少指针。这里没有插入,这意味着存在某种偏移量。这就是为什么还有push/pop\u front()和push/pop\u back()函数。它们表示推送/弹出操作的静态位置 推送意味着将一个项目放入堆栈(数据结构),使其成为堆栈最顶部的项目弹出意味着从堆栈中移除最上面的项。(你经常会听到第三个术语,偷看,意思是看/读最上面的项目。) 当涉及到队列时,通常应使用术语排队和出列,前者表示将项目附加到队列的“后端”,后者表示从队列中删除“前端”的项目 这些定义表明堆栈(如果您在脑海中描绘它)在空间上是垂直的,而队列是水平的。另一个区别是堆栈上的操作总是发生在同一端,而队列上的操作则发生在相反的一端 当涉及链表和双端队列(DEQUE)时,术语push和pop也被使用,例如在C++的STL中,您可以进行诸如
push_front
、push_back
、pop_front
和pop_back
等操作。这仅仅意味着项目可以在两端追加或删除
至于为什么叫“流行音乐”而不是“拉”(而不是“推”)。。。好问题。推送只是在集合的开头(或结尾)添加一个项目。弹出是删除同一项 在Java中,列表接口有add(0,item)和remove(0)。这些实际上与push(item)和pop()平行
然而,push和pop以及stacks在其特定的行为中很有趣,因此许多具有专门的数据结构,使得push和pop特别有效。您所要求的大部分是约定。对于队列,您可以推送或排队。你会看到两者。对于堆栈,您将看到添加或推送。没有真正的硬性规定。如果您使用的语言使用“push”作为约定,请使用“push”。命名很重要,但只是为了可用性和常识。只需在单个应用程序或系统中确保你的命名是一致的。 < P>至少在C++中,PUP和POP只指栈和队列之类的结构,其中操作发生的位置是数据结构中固有的。对于其他容器,如向量和列表,我们有push_back、push_front、pop_back等。对于我们不知道项目将在哪里结束或从哪里读取的容器,push和pop根本不用。push和pop只是用于从堆栈数据结构中插入和删除项的操作的常规名称。任何遵循后进先出模式(LIFO)的操作通常被称为Push和Pop,但它们可以被称为任何您喜欢的操作。Push和Pop的命名可能只是为了区分可以在堆栈上执行的操作和可以在列表上执行的操作。您也可以将它们称为add和remove,但它们往往意味着您可以在列表中的任何位置添加或删除元素,而不是简单地在开头(或结尾,如果您这样想的话)。类似地,enqueue和dequeue的存在是因为push和pop意味着插入或删除发生在同一位置,而不是列表的两端
如果你想要一个技术定义,你可能会说,push和pop是以后进先出(后进先出)方式影响列表同一端的O(1)操作。在谈论堆栈时使用push和pop的名称。堆栈是后进先出(LIFO)。因此,这些名称表示pop将返回最后一次推送的内容。当引用链接列表上的操作时,您可以将项目推送到列表中以添加它们。然后,您可以从列表中弹出项目以删除它们 如果从添加项目的列表的同一端弹出项目,则表示已实现堆栈或后进先出(LIFO)数据结构: 如果您从另一端弹出项目,那么您已经实现了一个队列——尽管术语通常是“排队”和“出列”。这是一种先进先出(FIFO)数据结构:
术语push和pop通常用于,而不是或。堆栈是后进先出(LIFO)数据结构;换句话说,首先要删除的是最近添加的项目。推送是指将新项目放入堆栈,而弹出是指将其取下 许多编程语言允许您以任何方式编写代码,包括对任何和所有数据结构使用push和pop名称,即使这不是您真正要做的。但是,我不推荐
algrebra Stack
{
data Stack;
data Element;
Empty() -> Stack;
Push(Stack,Element) -> Stack;
Pop(Stack) -> Stack;
Top(Stack) -> Element;
axiom Top(Push(s,e))==e;
axiom Pop(Push(s,e))==s;
axiom Pop(Empty())==undefined;
}