文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python数据结构-----栈1.0(栈的介绍与操作)

2023-10-18 17:00

关注

目录

前言:

栈的介绍

Python栈的操作

1.创建栈

2.判断栈是否为满

 3.判断栈是否为空

 4.压栈

5.出栈

6.展示栈数据

7.获取到栈顶的数据

8.获取到栈的数据总数

第三方模块实现栈

下载模块:

导入模块: 

使用示例:


前言:

        栈,作为经典的数据结构之一,在很多时候我们都会用到栈,跟链表一样同为线性表,但栈是一种后进先出的数据结构类型,这一点跟前面讲的链表不同。好,那这一期我们就来讲讲栈,以及怎么去通过Python去实现栈等相关操作。

栈的介绍

        在日常生活中,我们很多事物都跟栈相关,比如说把一堆书叠起来,书是从下往上叠放的,但当我们想去取书的时候,我们会先把上面的数拿走然后往下找到我们想要的数。这就是栈的表现了。图解如下:

在我们的程序当中,栈也是无时无刻在体现出来,就以网页前端开发为例子,当我们点进去一个网页时,网页会有一个返回上一级的按钮,当我们点击它,我们就会返回到上一个页面,这就是前端设计者利用栈设计出来的

图解: 

 栈是包含栈底和栈定这两端,当我们往栈里面放入数据时,数据会往栈底压下去,这个过程叫做压栈;当我们取出栈顶的数据时,数据是从栈的顶部依次取出,这个过程叫出栈。那下面就一期来看看怎么通过Python语言去操作栈。

Python栈的操作

        Python是一门具有良好面对对象操作的语言,我们可以去通过Python来实现自定义对象的操作,对此我们可以去定义class 出一个栈对象。同时Python当中是有其本身的数据容器的,我们可以通过链表来作为栈的数据容器,通过栈的特点去对列表进行‘改造’。下面就一起来看看吧。

相关操作如下: 

整体代码如下:

#栈对象class Stack(object):    #创建一个空栈    def __init__(self,size,top=-1):        self.size=size #栈的大小        self.top=top    #栈的栈顶,初始化为-1        self.stackdata=[] #空列表,作为数据容器    #判断这个栈是否满了    def isfull(self):        return self.top+1==self.size     #判断在栈是否为空栈    def isEmpty(self):        return self.top==0    #压栈,放入数据    def push(self,val):        if self.isfull(): #要做判断这个栈满了没有            print('stack is full')            return        else:            self.stackdata.append(val)            self.top+=1    #出栈,取出数据    def pop(self):        if self.isEmpty():#要判断这个栈是否为空            print('empty')            return        else:            self.stackdata.pop(self.top)            self.top-=1    #展示栈数据(也就是输出列表)    def showstack(self):        print(self.stackdata)    #获取到栈顶的数据    def peek(self):        if self.top!=-1:            return self.stackdata[self.top]    #返回这个栈多少个数据项    def size(self):        return len(self.stackdata)

下面我会进行一一讲解:

1.创建栈

作为一个栈是有大小,有栈顶指针以及数据存放位置的,那我们就依次建立这些功能,初始化栈顶指针为-1,当我们放入第一个数据的时候,栈顶指针就加一为0,此时正好对应列表第一个数据的下标0。代码如下:

class Stack(object):    #创建一个空栈    def __init__(self,size,top=-1):        self.size=size #栈的大小        self.top=top    #栈的栈顶,初始化为-1        self.stackdata=[] #空列表,作为数据容器

2.判断栈是否为满

栈是有大小的,这一点跟纯粹的列表不同,列表你可以放无限个数据进去,但是栈得控制好数据的数量,所以我们在放入数据之前要定义好判断这个栈是否为满的方法,如果满了那就返回False,不允许数据的存入。代码如下:

    #判断这个栈是否满了    def isfull(self):        return self.top+1==self.size

 3.判断栈是否为空

同样的,取数据之前我们也要去判断这个栈里面有没有数据,也就是判断这个栈是否为空,如果是空栈的话,那就返回True,说明无法取出数据。代码如下:

    #判断在栈是否为空栈    def isEmpty(self):        return self.top==-1

 4.压栈

每次压入一个数据的时候,栈顶就得往上移动一位加一

  #压栈,放入数据    def push(self,val):        if self.isfull(): #要做判断这个栈满了没有            print('stack is full')            return        else:            self.stackdata.append(val)            self.top+=1

5.出栈

同样的,每次出栈一个数据的时候,栈顶就得向下移动一位减一

  #出栈,取出数据    def pop(self):        if self.isEmpty():#要判断这个栈是否为空            print('empty')            return        else:            self.stackdata.pop()            self.top-=1

6.展示栈数据

    #展示栈数据(也就是输出列表)    def showstack(self):        print(self.stackdata)

7.获取到栈顶的数据

    #获取到栈顶的数据    def peek(self):        if self.top!=-1:            return self.stackdata[self.top]

8.获取到栈的数据总数

   #返回这个栈多少个数据项    def size(self):        return len(self.stackdata)

第三方模块实现栈

其实已经有人去写了关于栈的第三方模块了,我们只需要从整个模块里面去导入栈的类对象就行了,然后就可以直接去实例化栈对象,进行栈的相关功能操作

下载模块:

导入模块: 

from pythonds.basic.stack import Stack

使用示例:

from pythonds.basic.stack import Stackif __name__=='__main__':    s=Stack()    print(s.isEmpty())    s.push(1)    s.push('hello')    print(s.peek())    print(s.size())    s.push(8.886)    print(s.isEmpty())    s.pop()    s.pop()    print(s.size())    #输出结果:    # True    # hello    # 2    # False    # 1

当然,我并不建议这样子用,最后好我们还是直接去写一个栈的对象,我们可以去根据需求去添加方法,而不是去用别人的。

好了,以上就是本期的全部内容了,我们下期见!

分享一张壁纸:

来源地址:https://blog.csdn.net/m0_73633088/article/details/129528406

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯