前言

Python本身已有顺序表(List、Tupple)的实现,所以这里从栈开始。


什么是栈

想象一摞被堆起来的书,这就是栈。这堆书的特点是,最后被堆进去的书,永远在最上面。从这堆书里面取一本书出来,取哪本书最方便?肯定是最上面那本。栈这种数据结构的特点就是如此:后进先出(Last In First Out - LIFO),即最后被堆进去的数据,最先被拿出来。


栈的Python实现

栈可以用顺序表方式实现,也可以用链表方式实现。我大Python的内建数据结构太强大,可以用list直接实现栈,简单快捷。人生苦短,我用Python。代码如下:

  • class Stack(object):
    # 初始化栈为空列表
    def __init__(self):
    self.items = [] # 判断栈是否为空,返回布尔值
    def is_empty(self):
    return self.items == [] # 返回栈顶元素
    def peek(self):
    return self.items[len(self.items) - 1] # 返回栈的大小
    def size(self):
    return len(self.items) # 把新的元素堆进栈里面(程序员喜欢把这个过程叫做压栈,入栈,进栈……)
    def push(self, item):
    self.items.append(item) # 把栈顶元素丢出去(程序员喜欢把这个过程叫做出栈……)
    def pop(self, item):
    return self.items.pop() if __name__ == __main__:
    # 初始化一个栈对象
    my_stack = Stack()
    # 把'h'丢进栈里
    my_stack.push('h')
    # 把'a'丢进栈里
    my_stack.push('a')
    # 看一下栈的大小(有几个元素)
    print my_stack.size()
    # 打印栈顶元素
    print my_stack.peek()
    # 把栈顶元素丢出去,并打印出来
    print my_stack.pop()
    # 再看一下栈顶元素是谁
    print my_stack.peek()
    # 这个时候栈的大小是多少?
    print my_stack.size()
    # 再丢一个栈顶元素
    print my_stack.pop()
    # 看一下栈的大小
    print my_stack.size
    # 栈是不是空了?
    print my_stack.is_empty()
    # 哇~真好吃~
    print 'Yummy~'

Tips: 
看完上面的代码,聪明的同学一定知道了,Python里面实现栈,就是把list包装成一个类,再添加一些方法作为栈的基本操作。其他的数据结构在Python中也是以类似的方式实现的。 
那么,这里有一些有的没的要说一下~ 
如果希望items[]是Stack类私有的属性,这样做就好了:

def __init__(self):
self.__items = []

没错,就是在items前面加两个下划线__,在Python中,类的私有成员就是这样定义哒~ 
如果希望限定Stack类的成员只有items,不要其他的怪蜀黍乱加成员,那么这样做就好了:

class Stack(object):
__slots__ = ('__items') def __init__(self):
self.__items = []

这样就安全多啦~ 
Python并没有Java里的public/private/protected这样的修饰符,因为Python的设计者认为,“大家都是成年人了”~

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuqiang20121991/article/details/54139431

用python 实现一个栈的更多相关文章

  1. 两队列模拟一个栈,python实现

    python实现两个队列模拟一个栈: class Queue(object): def __init__(self): self.stack1=[] self.stack2=[] def enqueu ...

  2. python两个队列实现一个栈和两个栈实现一个队列

    1.两个栈实现一个队列 两个栈stack1和stack2, push的时候直接push进stack1,pop时需要判断stack1和stack2中的情况.如果stack2不为空的话,直接从stack2 ...

  3. python基本数据结构栈stack和队列queue

    1,栈,后进先出,多用于反转 Python里面实现栈,就是把list包装成一个类,再添加一些方法作为栈的基本操作. 栈的实现: class Stack(object): #初始化栈为空列表 def _ ...

  4. 老男孩Python高级全栈开发工程师三期完整无加密带课件(共104天)

    点击了解更多Python课程>>> 老男孩Python高级全栈开发工程师三期完整无加密带课件(共104天) 课程大纲 1.这一期比之前的Python培新课程增加了很多干货:Linux ...

  5. 【python测试开发栈】python基础语法大盘点

    周边很多同学在用python,但是偶尔会发现有人对python的基础语法还不是特别了解,所以帮大家梳理了python的基础语法(文中的介绍以python3为例).如果你已然是python大牛,可以跳过 ...

  6. 测开之Python自动化全栈工程师+性能专项(送思维导图)

    测开之Python自动化全栈工程师+性能专项 功能测试基础 接口测试基础接口的通信原理与本质cookie.session.token详解接口测试的意义与测试方法接口测试用例的设计 app测试 app流 ...

  7. 用Python写一个简单的Web框架

    一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...

  8. python 获取一个列表有多少连续列表

    python 获取一个列表有多少连续列表 例如 有列表 [1,2,3] 那么连续列表就是 [1,2],[2,3],[1,2,3] 程序实现如下: 运行结果:

  9. python是一个解释器

    python是一个解释器 利用pip安装python插件的时候,观察到python的运作方式是逐步解释执行的 适合作为高级调度语言: 异常的处理以及效率应该是主要的问题

随机推荐

  1. 安装activemq和java代码实现生产和消费

    Apache Active MQ的官网 http://activemq.apache.org/ 下载地址: 国外的网站,网速不好的时候,真的下不下来 http://activemq.apache.or ...

  2. DAY11 函数(二)

    一.函数的对象 1.1定义:函数名就是存放了函数的内存地址,存放了内存地址的变量都是对象,即 函数名 就是 函数对象 1.2函数对象的应用 1 可以直接被引用 fn = cp_fn def fn(): ...

  3. 封装axios在vue-cli项目中便捷使用

    首先创建一个vue-cli搭建起来的vue项目这个不用多说了. 安装axios,使用npm install axios --save命令安装依赖,这时候项目的package.json文件中的" ...

  4. 文献导读 | A Pan-Cancer Analysis of Enhancer Expression in Nearly 9000 Patient Samples

    Chen, H., Li, C., Peng, X., Zhou, Z., Weinstein, J.N., Liang, H. and Cancer Genome Atlas Research Ne ...

  5. Probability和Likelihood的区别

    Bayes for Beginners: Probability and Likelihood 好好看,非常有用. 以前死活都不理解Probability和Likelihood的区别,为什么这两个东西 ...

  6. windows2012安装

    windows server 2012 r2 安装无法找到install.wim 错误代码0x80070026,以及制作U启动盘决解ISO文件超过5G大小限制的解决方案关于在服务器上安装windows ...

  7. SQL SERVER 查看sql语句性能与执行时间

    [方法一] set statistics profile on set statistics io on set statistics time on go --sql语句 go set statis ...

  8. vscode keys

    // 快捷键设置 keyiing.json // 将键绑定放入此文件中以覆盖默认值 [ /* // 转换大写 { "key" : "ctrl+shift+u", ...

  9. 移动web技能总结

    对于作为一名前端开发人员,除了能够编写出满足需求的PC端页面之外,同时也是需要懂得怎么去制作移动web页面,毕竟使用移动设备来操作任何处理称为新时代的趋势,所以学好制作一个移动web时必须滴.于是通过 ...

  10. spring boot 添加客户端负载均衡

    1.pom.xml文件中,添加依赖包 <dependency> <groupId>org.springframework.cloud</groupId> <a ...