数据结构——python 003 栈和队列

栈和队列

栈——定义

是一种只能在同一端进行插入或删除操作的线性表。

表中允许进行插入、删除操作的一端称为栈顶。栈顶的当前位置是动态的,可以用一个称为栈顶指针的位置指示器来指示。

表的另一端称为栈底

当栈中没有数据元素时称为空栈

栈的插入操作通常称为进栈入栈,栈的删除操作通常称为退栈出栈

特点:“后进先出”或“先进后出”

在这里插入图片描述

入栈、出栈

顺序栈

    # 进栈
    def push(self,e):
        self.data.append(e)
        
    # 出栈
    def pop(self):
        assert not self.empty()             # 检测栈不为空,出栈
        return self.data.pop()
    

链栈

   # 进栈
    def push(self, e):
        p = LinkNode(e)
        p.next = self.head.next
        self.head.next = p

    # 出栈
    def pop(self):
        assert self.head.next != None
        p = self.head.next
        self.head.next = p.next
        return p.data


队列——定义

队列(简称为队)是一种操作受限的线性表,其限制为仅允许在表的一端进行插入,而在表的另一端进行删除。

进行插入的一端称为队尾

进行删除的一端称为队头队首

队列:先进先出表

默认队列一头只进,另一头只出,一个元素要入队,只能从队尾进。

在这里插入图片描述

进队的代码

循环队列

    # 元素进队
    # 在队列不满的情况下,先将队尾指针rear循环+1,然后将元素e放到该位置处,否则抛出异常
    def push(self, e):
        # 检测队满
        assert (self.rear+1)%MaxSize != self.front
        self.rear = (self.rear+1)%MaxSize
        self.data[self.rear] = e

    # 出队元素
    def pop(self):
        assert not self.empty()
        self.front = (self.front+1)%MaxSize
        return self.data[self.front]

队列的链式存储

    # 元素e进队
    def push(self, e):
        s = LinkNode(e)                     # 新建结点s
        if self.empty():
            self.front = self.rear = s
        else:
            self.rear.next = s
            self.rear = s

    # 出队操作
    def pop(self):
        assert not self.empty()
        if self.front == self.rear:         # 原链队只有一个结点
            e = self.front.data             # 取首结点的值
            self.front = self.rear = None   # 置为空队
        else:                               # 若原链队有多个结点
            e = self.front.data
            self.front = self.front.next    # front指向下一个结点
        return e


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值