一、什么是栈
栈是一系列对象的集合,这些对象的插入和删除遵循**后进先出(LIFO)**原则。
例如:将A压入栈,将B压入栈,将C压入栈,此时A在栈顶,C在栈底。此时弹出栈,会弹出A,再弹出栈,会弹出B,再弹出栈,会弹出C。
二、栈的抽象数据类型
栈是一种支持以下两种操作的抽象数据类型(ADT),下面用S表示一个栈的抽象数据类型实例:
S.push(e):将元素e添加到栈S的栈顶
S.pop():从栈S移除栈顶元素、并返回栈顶元素;若此时栈为空,此操作将出错
为了方便,我们定义了以下访问方法:
S.top():返回栈顶元素,但不移除栈顶元素;若此时栈为空,此操作将出错
S.is_empty():如果栈中不包含任何元素,则返回True
len(S):返回栈中元素的数量
三、栈的实现
1、基于数组的实现
通过list类中append(e)和pop()方法实现栈的push()和pop()
class Empty(Exception): #对栈为空时,调用pop、top方法报错时定义一个Empty异常类实例
pass
class ArrayStack:
def __init__(self):
self._data = [] #用列表实现栈
def __len__(self):
return len(self._data)
def is_empty(self):
return len(self._data) == 0
def push(self,e):
self._data.append(e)
def pop(self):
if self.is_empty():
raise Empty('Stack is empty')
return self._data.pop()
def top(self):
if self.is_empty():
raise Empty('Stack is empty')
return self._data[-1]
---------------------
【转载,仅作分享,侵删】
作者:琪仔要转行回coder
来源:CSDN
原文:https://blog.csdn.net/lllllaaa77/article/details/88387048
版权声明:本文为博主原创文章,转载请附上博文链接!
|
|