首页 > 代码库 > 如何理解栈(栈的实现方式)

如何理解栈(栈的实现方式)

网上看到的一段对话,写的很清晰,一目了然。

 

Frank: 什么是栈?

Linda: 它是一种数据结构,按先进后出(或后进先出)的方式收集对象。它通常有一个 API,其中包括 push() 和 pop() 等方法。有时也有peek() 方法

Frank: push() 有什么功能?

Linda: push() 接受一个输入对象,比如说 foo,并将它放入到一个内部容器(例如一个数组)中。push() 通常不返回结果。

Frank: 如果我 push() 两个对象,比如先是 foo,然后是 bar,结果会怎样?

Linda: 第二个对象 bar 应该在栈(至少包含两个对象)的顶部,所以如果调用 pop(),那么返回的应该是 bar,而不是 foo。如果再次调用pop(),那么应该返回 foo,然后栈为空(假设在添加这两个对象之前栈中没有对象)。

Frank: 也就是说,pop 移除最近放入栈中的项目?

Linda: 是的,pop() 应该移除最上面的项目(假设栈中还有可移除的项目)。peek() 与此类似,只是不移除栈中的对象。peek() 应该保留栈顶的项目

Frank: 如果之前没有 push 任何项目,那么调用 pop() 时会怎样?

Linda: pop() 应该抛出一个异常,表明栈中尚未 push 任何项

Frank: 如果 push()null 会怎样?

Linda: 栈应该抛出一个异常,因为 null 不是一个有效的可 push() 的值。

如何理解栈(栈的实现方式)