栈
先提出一个很生动的例子,当一群人排队在银行办理业务时,正好到了银行下班时间,所有人要离开银行,那此时最后进来的人离门口最近意味着最先离开,Last-In-First-Out,这就是所谓的***后进先出***原则。
什么是栈?
“栈”所遵循的存储数据规则就是后进先出,是一种特殊的数据结构,是只能在一端进行插入或删除操作的特殊线性表,这一端被称为栈顶,是浮动的一端;另一端被称为栈底,是固定的一端。
先进入的元素被压入栈底,最后进去的元素在栈顶,当需要读取数据时,从栈顶依次弹出元素,最后一个数据最后才会出来。
栈中的元素个数为0,则是空栈,插入操作称为入栈,删除操作称为出栈。
python中常见的栈操作
- stack():
建立一个空的栈对象
- push():
把一个元素添加到栈的顶层
- pop():
删除栈顶的元素,并返回这个怨怒是
- peek():
返回顶层元素,但不删除
- IsEmpty():
判断栈是否空
- size():
返回栈中元素个数
顺序栈
顺序栈是栈的顺序存储结构的简称,是运算受限的顺序表:
- 顺序栈中的元素用向量存放
- 栈底位置固定不变,可以设置为向量两端的任意一个端点
- 栈顶位置是随着进栈和出栈操作变化的,用整型变量Top指示栈顶位置
class Stack():
def __init__(self):
self.items=[]
def IsEmpty(self):
return self.items==[]
def peek(self):
return self.items[len(self.items)-1]
def size(self):
return len(self.items)
def push(self,value):
self.items.append(value)
def pop(self):
return self.items.pop()
链栈
栈的链式存储结构,栈顶指针是链表的头指针
是没有附加头节点的、运算受限的单链表,每一个新存入的元素都被放在链表的首节点,删除操作也是作用于首节点,LIFO。
calss Node():
def __init__(self,value,next=None):
self.value=value
self.next=next
class LStack():
def __init__(self):
self.top=None
def IsEmpty(self):
return self.top==None
def top(self):
if self.IsEmpty():
raise StackUnderflow
return self.top.value
def push():
self.top=Node(value,self.top)
def pop (self):
if self.IsEmpty():
raise StackUnderflow
result=self.top.value
self.top=self.top.next
return result