前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >栈和队列python实现

栈和队列python实现

作者头像
叶茂林
发布2023-07-30 11:07:40
1520
发布2023-07-30 11:07:40
举报
文章被收录于专栏:叶子的开发者社区

栈-LIFO数据结构

栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

----来自百度百科 

简单来说,栈作为一种数据结构,特点是先进去的后出来,后进去的先出来,属于后进先出(last in first out)的LIFO结构。

栈的基本操作有压栈push,弹栈pop,判空empty,取栈顶元素top,取栈当前容量size等等。

栈代码

python没有指针,无法自己完完全全从零实现一个栈,但是我们可以用列表来模拟实现这个栈。以下是全代码,之后进行逐一分析讲解。

代码语言:javascript
复制
class stack:
    def __init__(self):
        self.length = 0
        self.volume = []
        self.toppointer = -1

    def push(self, temp):
        self.volume.append(temp)
        self.length, self.toppointer = self.length + 1, self.toppointer + 1

    def pop(self):
        if (self.empty()):
            print('Sorry,this is a empty stack!')
            return
        self.volume.pop()
        self.length, self.toppointer = self.length - 1, self.toppointer - 1

    def top(self):
        if (self.empty()):
            print('Sorry,this is a empty stack!')
            return
        return self.volume[self.toppointer]

    def empty(self):
        if (self.length == 0):
            return True
        return False

    def size(self):
        return self.length

首先是栈的初始化,具体操作是用一个空的列表作为栈空间,length代表栈的当前容量,初始化为0,toppointer用来指向栈顶元素,初始化为-1:

代码语言:javascript
复制
    def __init__(self):
        self.length = 0
        self.volume = []
        self.toppointer = -1

push()

压栈操作的话,直接用列表的尾插,然后让length和toppointer加1。

代码语言:javascript
复制
    def push(self, temp):
        self.volume.append(temp)
        self.length, self.toppointer = self.length + 1, self.toppointer + 1

pop()

弹栈的话,需要做好安全措施,先判断栈是不是空的,因为我们后面会实现这个判断空栈的函数,所以可以先直接调用,不是空栈我们就弹栈,调用列表的pop删掉尾元素,再让length和toppointer减1。

代码语言:javascript
复制
    def pop(self):
        if (self.empty()):
            print('Sorry,this is a empty stack!')
            return
        self.volume.pop()
        self.length, self.toppointer = self.length - 1, self.toppointer - 1

top()

取栈顶元素,同样我们先判断是不是空栈,不是空栈再返回下标为toppointer的列表元素。

代码语言:javascript
复制
    def top(self):
        if (self.empty()):
            print('Sorry,this is a empty stack!')
            return
        return self.volume[self.toppointer]

empty()

判断栈是不是空的,直接看length是不是0。

代码语言:javascript
复制
    def empty(self):
        if (self.length == 0):
            return True
        return False

size()

额,返回length……

代码语言:javascript
复制
    def size(self):
        return self.length

队列代码

代码语言:javascript
复制
class queue:
    def __init__(self):
        self.length = 0
        self.volume = []

    def push(self, temp):
        self.volume.append(temp)
        self.length = self.length + 1

    def pop(self):
        if (self.empty()):
            print('Sorry,this is a empty queue!')
            return
        self.volume.pop(0)
        self.length= self.length - 1

    def front(self):
        if (self.empty()):
            print('Sorry,this is a empty queue!')
            return
        return self.volume[0]

    def empty(self):
        if (self.length == 0):
            return True
        return False

    def size(self):
        return self.length
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 栈-LIFO数据结构
  • 栈代码
    • push()
      • pop()
        • top()
          • empty()
            • size()
              • 队列代码
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档