栈在程序设计当中是一个十分常见的数据结构,它就相当于一个瓶子,可以往里面装入各种元素,最先装进这个瓶子里的元素,要把后装进这个瓶子里的全部元素拿出来完之后才能够把他给拿出来。假设这个瓶子在桌上平放,左边是瓶底,右边是瓶口,那么我们可以作出下图:
可以看到瓶子里一共被我放进了5个元素,分别是1,2,3,4,5。那么最先放进去的元素则是1,紧接着我放入了2,3,4,5.这很容易理解对吧。如果我们想要把其中的一个元素,比如2取出来,那么我们需要把3,4,5都取出来才能够拿到2。因此栈这个数据结构遵循的是“先进后出”的原则。我们可以用python当中的list来表示一个栈,list列表是一个天然的栈结构,可以很容易地表示出栈和入栈。首先我们定义一个栈的类,再到栈里定义各种栈的实现方法即可,比如出栈,入栈,判断栈是否为空,判断栈的大小等方法,程序如下:
class Stack(): def __init__(self): # 初始化一个空的列表 self.__list=[] # 压栈,也就是把元素从上方添加上去,但是这里我咋感觉是从下方添加进去的,顺序反了? def push(self,item): self.__list.append(item) def pop(self): return self.__list.pop()# 弹出栈顶的元素,同时删除栈顶的元素 # 返回栈顶的元素 def peek(self): return self.__list[len(self.__list)-1]# 也就是获取列表当中的最后一个元素 # 判断栈是否为空 def is_empty(self): return self.__list == [] # 计算栈的大小 def size(self): return len(self.__list) stack = Stack() print("Is this empty? :",stack.is_empty()) stack.push(1) stack.push(2) stack.push(3) stack.push(4) print("Is this empty? :",stack.is_empty()) print(stack.pop()) print(stack.pop()) print(stack.pop()) print(stack.pop())
可以看到最后我们创建了一个stack对象来调用里面的方法,并往栈里送入了4个元素,最后使用pop方法依次弹出栈顶的元素,输出如下:
Is this empty? : True Is this empty? : False 4 3 2 1
这就是我们的数据结构:栈。简单吧!