什么是栈
栈就是只能在一端插入和删除数据的链表,这个端就叫做栈顶(top),最后一个添加的数据第一个被删除。因此,这也叫后进先出(LAST IN FIRST OUT)链表或是先进后出链表(FIRST IN LAST OUT)。
举个例子,餐厅的盘子堆,盘子洗完要堆到上面,而不是插到下面的某个位置(相信不会有人那么做)。当厨师要用到盘子时从最上面的开始拿。即最先放在堆里的盘子会被最后一个用到。
栈有两种操作:
- 进栈指令(PUSH):在栈中现有元素顶部添加一个元素,新加入的元素变为最顶端的元素。
- 出栈指令(POP):取出栈顶元素,删除栈中的这个元素。
有些情况下,栈的最大长度有限。如果栈中元素已经达到最大长度,再用进栈指令会造成堆栈上溢出(stack overflow),相似的,如果堆栈已空还用出栈指令会造成堆栈下溢出(stack underflow)。
栈的python实现
class Stack(object):
def __init__(self, limit=10):
self.__items = []
self.__limit = limit
def isEmpty(self):
return self.__items == []
def peek(self):
return self.__items[len(self.__items) - 1]
def size(self):
return len(self.__items)
def push(self, item):
if len(self.__items) >= self.__limit:
self.double_limit()
self.__items.append(item)
def pop(self):
if len(self.__items) <= 0:
return -1
else:
return self.__items.pop()
def double_limit(self):
self.__limit *= 2
if __name__=="__main__":
myStack = Stack()
myStack.push(1)
myStack.push(3)
myStack.push(5)
myStack.push(7)
myStack.push(8)
print(myStack.size())
myStack.pop()
myStack.pop()
myStack.pop()
print(myStack.size())
Python中栈的方法
在Python中,列表就类似是一个栈,提供接口如下:
操作 | 描述 |
---|---|
s = [] | 创建一个栈 |
s.append(x) | 往栈内添加一个元素 |
s.pop() | 在栈内删除一个元素 |
not s | 判断是否为空栈 |
len(s) | 获取栈内元素的数量 |
s[-1] | 获取栈顶的元素 |
python列表方法使得列表可以很方便的作为一个堆栈来使用,用 append() 方法可以把一个元素添加到堆栈顶。用不指定索引的 pop() 方法可以把一个元素从堆栈顶释放出来。例如:
>>> stack = [3, 4, 5]
>>> stack.append(6)
>>> stack.append(7)
>>> stack
[3, 4, 5, 6, 7]
>>> stack.pop()
7
>>> stack
[3, 4, 5, 6]
>>> stack.pop()
6
>>> stack.pop()
5
>>> stack
[3, 4]