列表是一种最自然的数据组织方式。上一章已经介绍如何使用 List 类将数据组织成一个列
表。如果数据存储的顺序不重要,也不必对数据进行查找,那么列表就是一种再好不过的
数据结构。对于其他一些应用,列表就显得太过简陋了,我们需要某种和列表类似但是更
复杂的数据结构。
栈就是和列表类似的一种数据结构,它可用来解决计算机世界里的很多问题。栈是一种高
效的数据结构,因为数据只能在栈顶添加或删除,所以这样的操作很快,而且容易实现。
栈的使用遍布程序语言实现的方方面面,从表达式求值到处理函数调用
4.1 对栈的操作
栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶。咖啡厅内
的一摞盘子是现实世界中常见的栈的例子。只能从最上面取盘子,盘子洗净后,也只能摞
在这一摞盘子的最上面。栈被称为一种后入先出(LIFO,last-in-first-out)的数据结构。
由于栈具有后入先出的特点,所以任何不在栈顶的元素都无法访问。为了得到栈底的元
素,必须先拿掉上面的元素。
对栈的两种主要操作是将一个元素压入栈和将一个元素弹出栈。入栈使用 push() 方法,出
栈使用 pop() 方法。图 4-1 演示了入栈和出栈的过程。
另一个常用的操作是预览栈顶的元素。 pop() 方法虽然可以访问栈顶的元素,但是调用该方
法后,栈顶元素也从栈中被永久性地删除了。 peek() 方法则只返回栈顶元素,而不删除它。