经常使用py的一些数据结构,如list,及list的一些方法. 还有hash表等. 各类数据结构方法用的很6,然而不知道是底层是怎么实现的.
基于此,就开始研究一下py实现一些数据结构, 以便于对计算机行业了然不惑.
刚开始搞是一脸懵逼状态... 话说题意有时候都整不明白,更别说解题了.慢慢来吧...

stack结构: LIFO队列

动态图模拟各类数据结构

栈数据结构关键词

栈操作

栈常用功能

什么意思? 也就是自己创建个类, 能够实例化被别人享用里面的功能.(类似list, arr = [], arr.append() 系统帮你实现好了.)


使用list功能模拟栈
   栈的功能
        push
        pop
        clear
        size

python借助list实现栈: 桶里面放东西:LIFO

class Stack:
    def __init__(self):
        self.arr = []

    def push(self, item):  # 压入值
        self.arr.append(item)

    def pop(self):  # 弹出值
        return self.arr.pop()

    def clear(self):
        del self.arr[:]  # 仅清空列表里的项, 最终 [],不用于del arr

    def size(self):  # 获取值的长度
        return len(self.arr)

    def top(self):  # 获取最上面的值
        return self.arr[self.size() - 1]

# 操作演示
s = Stack()
s.push('maotai')
s.push('maotai1')
s.push('maotai2')

print(s.arr)  # ['maotai', 'maotai1', 'maotai2']
print(s.size())  # 3
print(s.top())  # maotai2

栈的应用: 十进制转二进制

先看看算法: 笔画一画更有感觉

十进制转二进制 是一个应用堆栈的典型案例。十进制转二进制 采用“除2取余,逆序排列”的方法,如图所示:

怎么做呢?

dec2bin算法思路:
1.我不需要小数点,整除(//)
2.除数<=余数,终止计算
3.余数逆序排列即为结果

以下代码看不懂时候,需要调试看一下


class Stack:
    def __init__(self):
        self.arr = []

    def push(self, item):
        self.arr.append(item)

    def pop(self):
        self.arr.pop()

    def clear(self):
        del self.arr[:]  # 仅清空列表里的项, 最终 [],不用于del arr

    def size(self):
        return len(self.arr)

## 借助系统的arr
def dec2bin(num):
    tmp = []
    while True:
        rem = num % 2
        tmp.insert(0, str(rem))
        num = num // 2
        if num < 2:
            tmp.insert(0, str(num))
            break
    # print(tmp)
    return ''.join(tmp)

res = dec2bin(1024)  # 10000000000
print(res)

## 借助自己写的stack
def dec2bin(num):
    tmp = Stack()
    while True:
        rem = num % 2
        tmp.push(str(rem))
        num = num // 2
        if num < 2:
            tmp.push(str(num)) #将最后以为除数也加进去
            break
    tmp.arr.reverse() #直接修改arr
    return "".join(tmp.arr)

res2 = dec2bin(1024)  # 10000000000
print(res2)

附录:

del arr[:]和del arr的区别


del arr[:]: 将arr置为[]

>>> arr = [1,2,3,4]
>>> arr[:]
[1, 2, 3, 4]
>>> del arr[:]
>>> arr
[]

>>> del arr # 将arr id干掉
>>> arr
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'arr' is not defined

可视化数据结构网站

可动态演示一些常见数据结构,排序等.

[adt]python实现栈-体验数据结构的更多相关文章

  1. Python全栈开发之5、几种常见的排序算法以及collections模块提供的数据结构

    转载请注明出处http://www.cnblogs.com/Wxtrkbc/p/5492298.html 在面试中,经常会遇到一些考排序算法的题,在这里,我就简单了列举了几种最常见的排序算法供大家学习 ...

  2. 老男孩Python全栈第2期+课件笔记【高清完整92天整套视频教程】

    点击了解更多Python课程>>> 老男孩Python全栈第2期+课件笔记[高清完整92天整套视频教程] 课程目录 ├─day01-python 全栈开发-基础篇 │ 01 pyth ...

  3. Python全栈开发【面向对象进阶】

    Python全栈开发[面向对象进阶] 本节内容: isinstance(obj,cls)和issubclass(sub,super) 反射 __setattr__,__delattr__,__geta ...

  4. Python全栈开发【面向对象】

    Python全栈开发[面向对象] 本节内容: 三大编程范式 面向对象设计与面向对象编程 类和对象 静态属性.类方法.静态方法 类组合 继承 多态 封装 三大编程范式 三大编程范式: 1.面向过程编程 ...

  5. Python全栈开发【模块】

    Python全栈开发[模块] 本节内容: 模块介绍 time random os sys json & picle shelve XML hashlib ConfigParser loggin ...

  6. Python全栈之路目录结构

    基础 1.Python全栈之路-----基础篇 2.Python全栈之路---运算符与基本的数据结构 3.Python全栈之路3--set集合--三元运算--深浅拷贝--初识函数 4.Python全栈 ...

  7. [Python笔记][第二章Python序列-复杂的数据结构]

    2016/1/27学习内容 第二章 Python序列-复杂的数据结构 堆 import heapq #添加元素进堆 heapq.heappush(heap,n) #小根堆堆顶 heapq.heappo ...

  8. python全栈开发中级班全程笔记(第二模块、第四章)(常用模块导入)

    python全栈开发笔记第二模块 第四章 :常用模块(第二部分)     一.os 模块的 详解 1.os.getcwd()    :得到当前工作目录,即当前python解释器所在目录路径 impor ...

  9. Python全栈之路----目录

    Module1 Python基本语法 Python全栈之路----编程基本情况介绍 Python全栈之路----常用数据类型--集合 Module2 数据类型.字符编码.文件操作 Python全栈之路 ...

随机推荐

  1. linux中删除文件名称乱码

    在最近的操作中发现一些上传的文件有乱码,更改几次都无法正常转换到中文.下面给出正确的解决方案: 使用 ls -i 或者 ls -inum 查找出文件id号(红色字体) [root@localhost ...

  2. 面试题:应用中很多jar包,比如spring、mybatis、redis等等,各自用的日志系统各异,怎么用slf4j统一输出?(上)

    一.问题概述 如题所说,后端应用(非spring boot项目)通常用到了很多jar包,比如spring系列.mybatis.hibernate.各类连接数据库的客户端的jar包.可能这个jar包用的 ...

  3. 攻防对抗中常用的windows命令(渗透测试和应急响应)

    一.渗透测试 1.信息收集类 #查看系统信息 >systeminfo #查看用户信息 >net user >net user xxx #查看网络信息 >ipconfig /al ...

  4. 一键用VS编译脚本

    set MSBUILD_PATH="C:\Program Files (x86)\MSBuild\12.0\Bin\MsBuild.exe" set ZIP_TOOL=" ...

  5. 数字模型制作规范(转自Unity3D群)

    本文提到的所有数字模型制作,全部是用3D MAX建立模型,即使是不同的驱动引擎,对模型的要求基本是相同的.当一个VR模型制作完成时,它所包含的基本内容包括场景尺寸.单位,模型归类塌陷.命名.节点编辑, ...

  6. Windows 8.1 100% 磁盘使用率解决方案

    前段时间我的win8电脑爆卡!动不动就卡死,一点都动不了. 好不容易打开了任务管理器,发现disk usage: 100%,实在是不理解,磁盘使用率100%怎么会影响流畅度?如果是CPU或内存还好理解 ...

  7. Redis学习资料整理

    Redis学习资料: (1)Redis设计与实现 (2)十五分钟介绍 Redis数据结构 (3)redis安装 (4)redis指令手册中文版 Hiredis学习资料: (1)hiredis安装及测试 ...

  8. 微信 获取wx.config 参数 基类

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  9. TOP100summit:【分享实录】爆炸式增长的斗鱼架构平台的演进

    本篇文章内容来自2016年TOP100summit斗鱼数据平台部总监吴瑞城的案例分享. 编辑:Cynthia 吴瑞诚:斗鱼数据平台部总监 曾先后就职于淘宝.一号店. 从0到1搭建公司大数据平台.平台规 ...

  10. Django模板的加深

    网站模板的设计,一般的,都有一些通用的设计,有导航.底部.统计等相关代码:nav.html.bottom.html.tongji.html 在我前面Django工程的基础上建立一个base.html包 ...