python进阶之数据结构与算法--入门-利用列表实现栈(小白piao分享)
程序员文章站
2022-07-14 19:00:04
...
概念:
栈:
名称的由来:这个名字来源于自动售货机中用弹簧顶住的一堆盘子的隐喻。
概念:这里提到的栈是一种抽象的数据结构,而非空间内存分配处涉及的空间存储的概念。但是大同小异,原理还是来自于对栈空间的理解。这里的栈是有一系列对象组成的一个集合,这些对象的插入和删除操作遵循后进先出(LIFO)原则。用户可以在任意时刻向栈中插入一个对象,但只能取得或者删除最后一个插入的对象(即所谓的栈顶)。
目的:通过列表实现栈
class ArrayStack:
def __init__(self):
self._data = []
def __len__(self):
return len(self._data)
def top(self):# 查询栈顶
if self.is_empty():
raise TypeError('Stack is empty')
return self._data[-1]
def is_empty(self):# 判空
return len(self._data)==0
def push(self,var):# 压栈
self._data.append(var)
def pop(self):
if self.is_empty():# 为空时抛出异常,不能进行出栈操作
raise TypeError('Stack is empty')
return self._data.pop()
有些同学可能认为,是不是还有其他操作没有完成,为什么不能在中间插入或者其他操作,因为栈不具备这些功能,所以实现的都是栈的常规功能。
利用栈实现数据的逆置
由于LIFO协议的限制,栈可以用作一种通用的工具,用于实现一个数据序列的逆置,这一思想可以用于很多方面,例如以降序的方式显示一个数据集,我们可以通过先逐行读取数据,然后压如一个栈中,在按照从栈中弹出的顺序来写入。这个方法的实现过程如下:
# S为ArrayStack的实例对象
def reverse_file(filename):
S = ArrayStack()
with open(filename) as orig:
for line in orig:
S.push(line.rstrip('\n'))
with open(filename,'w') as fd:
while not S.is_empty():
fd.write(S.pop()+'\n')
简单的小例子就到这里,想要了解更多有趣内容,请关注‘小白piao学python’(会有不定期的公开课哦),如果想要咨询学习python的小技巧,可以联系小白piao的个人微信:wxi_xbp_python3:
上一篇: 第十八课--组合选择符
下一篇: 简化数据结构的初始化方法