网上看到的一段对话,写的很清晰,一目了然。
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()
的值。