栈
一、栈的定义
"栈"者,存储货物或供旅客住宿的地方,如客栈。栈房。可引申为仓库、中转站货栈。所以引入到计算机领域里,就是指数据暂时存储的地方,所以才有进栈、出栈
的说法。
栈是一种运算受限的线性表,是限定仅在表头进行插入和删除操作的线性表。能进行插入和删除操作的一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。由于运算的限制,所以栈存储数据是符合先进后出的原则,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个压入的数据是被第一个读出来的)。
栈作为一种限定仅在表头进行插入和删除操作的线性表,栈强调的是一种数据操作的方式,至于内部的存储即可以采用顺序存储也可以采用链式存储,根据需要选择即可。故栈可以分为顺序栈和链式栈,即采用顺序表实现的栈为顺序栈,采用链表实现的为链式栈。
二、用python实现栈
利用顺序表的存储方式实现栈,在此用python中的list来实现栈
class Stack(object):
'''定义栈'''
#初始化
def __init__(self):
#用list存储数据,初始时没有数据,为空列表
self.__list = []
def push(self,item):
'''添加一个元素到栈顶,即压栈、入栈。考虑用顺序表存储数据,从列表尾部添加效率高,即以列表尾为栈顶'''
self.__list.append(item)
def pop(self):
'''弹出栈顶元素,列表尾部为栈顶,故用list的pop()方法'''
return self.__list.pop()
def peek(self):
'''返回栈顶元素,即列表最后一个元素,注意判断栈是否为空'''
if self.__list:
return self.__list[-1]
else:
return None
def is_empty(self):
'''判断栈是否为空'''
return self.__list == []
def size(self):
'''返回栈内的元素个数'''
return len(self.__list)
if __name__=='__main__':
s=Stack()
res=s.is_empty()
print(res)
s.push(1)
s.push(2)
s.push('jack')
l=s.size()
print(l)
print(s.peek())
print(s.pop())
print(s.peek())
True
3
jack
jack
2