栈的理解(基于python实现)

先提出一个很生动的例子,当一群人排队在银行办理业务时,正好到了银行下班时间,所有人要离开银行,那此时最后进来的人离门口最近意味着最先离开,Last-In-First-Out,这就是所谓的***后进先出***原则。

什么是栈?

“栈”所遵循的存储数据规则就是后进先出,是一种特殊的数据结构,是只能在一端进行插入或删除操作的特殊线性表,这一端被称为栈顶,是浮动的一端;另一端被称为栈底,是固定的一端。

先进入的元素被压入栈底,最后进去的元素在栈顶,当需要读取数据时,从栈顶依次弹出元素,最后一个数据最后才会出来。

栈中的元素个数为0,则是空栈,插入操作称为入栈,删除操作称为出栈

python中常见的栈操作

  1. stack():

建立一个空的栈对象

  1. push():

把一个元素添加到栈的顶层

  1. pop():

删除栈顶的元素,并返回这个怨怒是

  1. peek():

返回顶层元素,但不删除

  1. IsEmpty():

判断栈是否空

  1. size():

返回栈中元素个数

顺序栈

顺序栈是栈的顺序存储结构的简称,是运算受限的顺序表:

  1. 顺序栈中的元素用向量存放
  2. 栈底位置固定不变,可以设置为向量两端的任意一个端点
  3. 栈顶位置是随着进栈和出栈操作变化的,用整型变量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
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值