易懂易理解的栈与栈操作(Python实现)
栈(Stack)在我们的生活中无处不在,其思想在生活和编程中有着重要的作用,因此对其深入掌握和理解有着重要的意义。
栈的特点
栈属于一对一的线性结构,与队列类似,其是一种运算受限的数据结构。
其特点是先进后出(后进先出)。
栈的基本操作包括
- 初始化栈
- 判断栈空
- 判断栈满
- 入栈操作
- 出栈操作
- 其他
栈的应用
- 模拟递归
- 进制转换
- 匹配问题(括号匹配)
- 运算问题(表达式求值)
- Ctrl+Z(撤回)
总之:生活中类似悔一步棋、撤回消息、访问文件夹等等都用到了栈的思想。
废话不多说,直接上代码。
栈的基本操作
"""栈 """
class Stack():
def __init__(self, size): # 初始化栈
'''
:param size: 栈的的大小
'''
self.data = ['null' for i in range(0, size)] # 生成了指定长度(size)的列表
self.size = size
self.top = -1 # 栈顶指针进行初始化
def Empty(self): # 判断栈是否为空
if self.top == -1:
return True
else:
return False
def Full(self): # 判断时候满栈
if self.top == self.size - 1: # 下标为:size-1
return True
else:
return False
def push(self, content): # 入栈的功能实现
"""
:param content: 新元素数据
:return:
"""
if self.Full():
print("The Stack is over!")
else:
self.top = self.top + 1
self.data[self.top] = content
def pop(self): # 出栈的功能实现
if self.Empty():
print("The stack is Empty,is not element@")
else:
print(self.data[self.top]) # 先取元素
self.data[self.top] = 'null' # 再把元素置空
self.top = self.top - 1 # 最后栈针
光写了方法不用肯定不爽,下面就来用一下。
栈的使用
if __name__ == '__main__':
s = Stack(4) # 调用类时可以直接传入类参数,原因:__init__ 方法!
print("是否为空栈:", s.Empty())
s.push("AAA")
s.push("BBB")
s.push("CCC")
s.push("DDD")
s.push("EEE") # 提示:The Stack is over! 超过栈容
print("是否已满栈:", s.Full())
s.pop(), s.pop(), s.pop(), s.pop() # 入栈顺序和出栈顺序刚好相反
运行结果:
是否为空栈: True
The Stack is over!
是否已满栈: True
DDD
CCC
BBB
AAA
多日后,我发现理解栈的工作原理比会手写一个栈更重要,因此分享了这一段代码,希望能对姥爷们理解栈有帮助, 参考了Eric Matthes大佬《Python编程:从入门到实践》相关内容,结合个人理解进行的分享,欢迎各位大佬批评指正。
参考文献:埃里克·马瑟斯 《Python编程:从入门到实践》人民邮电出版社