[adt]python实现栈-体验数据结构
经常使用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实现栈-体验数据结构的更多相关文章
- Python全栈开发之5、几种常见的排序算法以及collections模块提供的数据结构
转载请注明出处http://www.cnblogs.com/Wxtrkbc/p/5492298.html 在面试中,经常会遇到一些考排序算法的题,在这里,我就简单了列举了几种最常见的排序算法供大家学习 ...
- 老男孩Python全栈第2期+课件笔记【高清完整92天整套视频教程】
点击了解更多Python课程>>> 老男孩Python全栈第2期+课件笔记[高清完整92天整套视频教程] 课程目录 ├─day01-python 全栈开发-基础篇 │ 01 pyth ...
- Python全栈开发【面向对象进阶】
Python全栈开发[面向对象进阶] 本节内容: isinstance(obj,cls)和issubclass(sub,super) 反射 __setattr__,__delattr__,__geta ...
- Python全栈开发【面向对象】
Python全栈开发[面向对象] 本节内容: 三大编程范式 面向对象设计与面向对象编程 类和对象 静态属性.类方法.静态方法 类组合 继承 多态 封装 三大编程范式 三大编程范式: 1.面向过程编程 ...
- Python全栈开发【模块】
Python全栈开发[模块] 本节内容: 模块介绍 time random os sys json & picle shelve XML hashlib ConfigParser loggin ...
- Python全栈之路目录结构
基础 1.Python全栈之路-----基础篇 2.Python全栈之路---运算符与基本的数据结构 3.Python全栈之路3--set集合--三元运算--深浅拷贝--初识函数 4.Python全栈 ...
- [Python笔记][第二章Python序列-复杂的数据结构]
2016/1/27学习内容 第二章 Python序列-复杂的数据结构 堆 import heapq #添加元素进堆 heapq.heappush(heap,n) #小根堆堆顶 heapq.heappo ...
- python全栈开发中级班全程笔记(第二模块、第四章)(常用模块导入)
python全栈开发笔记第二模块 第四章 :常用模块(第二部分) 一.os 模块的 详解 1.os.getcwd() :得到当前工作目录,即当前python解释器所在目录路径 impor ...
- Python全栈之路----目录
Module1 Python基本语法 Python全栈之路----编程基本情况介绍 Python全栈之路----常用数据类型--集合 Module2 数据类型.字符编码.文件操作 Python全栈之路 ...
随机推荐
- pg3 bypass源码阅读 —— 学习x64内核hook跳板技术
如之前描述的 pg3复杂了许多 先来看看都要hook哪些点 1.hook dpc和定时器分发器,防止seh路线触发pg KiTimerListExpire,KiRetireDpcList 看一下hoo ...
- Matlab 三维绘图与统计绘图
一. 三维绘图 p = : pi/: *pi; x = cos(p); y = sin(p); z = p; plot3(x,y,z) x = -:.:; %有-2为起点,2为递增步长,2为终止点 y ...
- Elasticsearch学习之深入聚合分析五---案例实战
1. fielddata核心原理 fielddata加载到内存的过程是lazy加载的,对一个analzyed field执行聚合时,才会加载,而且是field-level加载的,一个index的一个f ...
- sencha touch JsonP 自动提示消息 masked
//公用类 Ext.define('app.util', { alternateClassName: 'util', statics: { /*为Ext.Viewport添加一个消息提示组件(需要初始 ...
- CF510B Fox And Two Dots(搜索图形环)
B. Fox And Two Dots time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- 【BZOJ2331】[SCOI2011]地板 插头DP
[BZOJ2331][SCOI2011]地板 Description lxhgww的小名叫“小L”,这是因为他总是很喜欢L型的东西.小L家的客厅是一个的矩形,现在他想用L型的地板来铺满整个客厅,客厅里 ...
- Centos6.10安装tomcat
1. 下载tomcat 2. 解压到相应的路径下 tar -xzvf apache-tomcat-8.5.34.tar.gz 3. 启动tomcat # 进入"apache-tomca ...
- Solr学习笔记之4、Solr配置文件简介
Solr学习笔记之4.Solr配置文件简介 摘自<Solr in Action>. 1. solr.xml – Defines one or more cores per Solr ser ...
- CCCC L2-013. 红色警报 连通分量
题解:将问题转化成连通分量.每次失去一座城市,切断其所有的边,算一次现在的连通分量.若增量大于1,则发出警报. 至于如何算连通分量,直接用tarjan模板 坑://我昨天晚上半夜敲的模板,把一个算所有 ...
- linux系统下top命令参数详解
简介 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器. top显示系统当前的进程和其他状况,是一个动态显示过程,即可以通过用户按 ...