Python -- 数据结构实现
1.堆栈(pyStack.py)
class PyStack: def __init__(self, size=20): self.stack = [] self.size = size self.top = -1 def setSize(self, size): self.size = size def push(self, element): if self.isFull(): raise IndexError else: self.stack.append(element) self.top += 1 def pop(self): if self.isEmpty(): raise 'PyStackUnderflow' else: element = self.stack[-1] self.top -= 1 del self.stack[-1] return element def getTop(self): return self.top def empty(self): self.stack = [] self.top = -1 def isEmpty(self): if self.top == -1: return True else: return False def isFull(self): if self.top == self.size-1: return True else: return False if __name__ == '__main__': stack = PyStack() for i in range(10): stack.push(i) print('栈顶是:', stack.getTop()) for i in range(10): print(stack.pop()) stack.empty() for i in range(21): stack.push(i)
2.队列(PyQueue.py)
class QueueException(Exception): def __init__(self, info): super(QueueException, self).__init__() print('队列异常:', info) class PyQueue: def __init__(self, size=20): self.queue = [] self.size = 20 self.end = -1 def setSize(self, size): self.size = size def inQueue(self, element): if self.end < self.size-1: self.queue.append(element) self.end += 1 else: raise QueueException('队尾越界') def outQueue(self): if self.end != -1: element = self.queue[0] self.queue = self.queue[1:] self.end -= 1 return element else: raise QueueException('队头越界') def getEndIndex(self): return self.end def empty(self): self.queue = [] self.end = -1 if __name__ == '__main__': queue = PyQueue() for i in range(20): queue.inQueue(str(i)*3) print('队尾Index:', queue.getEndIndex()) for i in range(20): print(queue.outQueue()) # queue.outQueue()
3.树(PyTree.py)
G = ['G', []] H = ['H', []] I = ['I', []] K = ['K', []] D = ['D', []] E = ['E', [G, H, I, K]] F = ['F', []] A = ['A', [D, E]] B = ['B', []] C = ['C', [F]] Root = ['Root', [A, B, C]] print(Root)
4.二叉树(pyBTree.py)
class BTree: def __init__(self, value): self.value = value self.left = None self.Right = None def insertLeft(self, value): self.left = BTree(value) return self.left def insertRight(self, value): self.right = BTree(value) return self.right def show(self): print(self.value) if __name__ == '__main__': Root = BTree('Root') A = Root.insertLeft('A') C = A.insertLeft('C') D = A.insertRight('D') F = D.insertLeft('F') G = D.insertRight('G') B = Root.insertRight('B') E = B.insertRight('E') Root.show() Root.left.show() Root.right.show() Root.right.right.show()
5.二叉树的遍历(pyBTreeTraversal.py)
class BTree: def __init__(self, value): self.value = value self.left = None self.right = None def insertLeft(self, value): self.left = BTree(value) return self.left def insertRight(self, value): self.right = BTree(value) return self.right def show(self): print(self.value) def preOrder(self): self.show() if self.left: self.left.preOrder() if self.right: self.right.preOrder() def inOrder(self): if self.left: self.left.inOrder() self.show() if self.right: self.right.inOrder() def postOrder(self): if self.left: self.left.postOrder() if self.right: self.right.postOrder() self.show() Root = BTree('Root') A = Root.insertLeft('A') C = A.insertLeft('C') D = A.insertRight('D') F = D.insertLeft('F') G = D.insertRight('G') B = Root.insertRight('B') E = B.insertRight('E') Root.postOrder()
6.图的构造以及路径查找(pyGraph.py)
注意:(list).sort(key=len)按长度排序
也可以写成sorted((list), key=len)
默认排序是index
Python3里的(list).sort()已不支持lambda表达式
def searchGraph(graph, start, end): results = [] generatePath(graph, [start], end, results) results.sort(key=len) return results def generatePath(graph, path, end, results): state = path[-1] if state==end: results.append(path) # path = [] else: for arc in graph[state]: if arc not in path: generatePath(graph, path+[arc], end, results) if __name__=='__main__': Graph = {'A': ['B', 'C', 'D'], 'B': ['E'], 'C': ['D', 'F'], 'D': ['B', 'E', 'G'], 'E': [], 'F': ['D', 'G'], 'G': ['E']} paths = searchGraph(Graph, 'A', 'D') for i in paths: print(i)
Python -- 数据结构实现的更多相关文章
- python数据结构与算法
最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...
- python数据结构与算法——链表
具体的数据结构可以参考下面的这两篇博客: python 数据结构之单链表的实现: http://www.cnblogs.com/yupeng/p/3413763.html python 数据结构之双向 ...
- python数据结构之图的实现
python数据结构之图的实现,官方有一篇文章介绍,http://www.python.org/doc/essays/graphs.html 下面简要的介绍下: 比如有这么一张图: A -> B ...
- Python数据结构与算法--List和Dictionaries
Lists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着 list 操作执行的快慢. 当然他们也试图优化一些不常见的操作. 但是当权衡的时候,它们还 ...
- Python数据结构与算法--算法分析
在计算机科学中,算法分析(Analysis of algorithm)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程.算法的效率或复杂度在理论上表示为一个函数.其定义 ...
- Python数据结构与循环语句
# Python数据结构与循环语句: 首先编程是一项技能,类似跑步,期初不必在意细节,能使用起来就行,等学的游刃有余了再回过头来关注细节问题也不迟. 关于买书: 学会python之后,才需要买书 ...
- python数据结构之栈与队列
python数据结构之栈与队列 用list实现堆栈stack 堆栈:后进先出 如何进?用append 如何出?用pop() >>> >>> stack = [3, ...
- python数据结构之树和二叉树(先序遍历、中序遍历和后序遍历)
python数据结构之树和二叉树(先序遍历.中序遍历和后序遍历) 树 树是\(n\)(\(n\ge 0\))个结点的有限集.在任意一棵非空树中,有且只有一个根结点. 二叉树是有限个元素的集合,该集合或 ...
- Python数据结构之四——set(集合)
Python版本:3.6.2 操作系统:Windows 作者:SmallWZQ 经过几天的回顾和学习,我终于把Python 3.x中的基础知识介绍好啦.下面将要继续什么呢?让我想想先~~~嗯,还是 ...
- Python数据结构之单链表
Python数据结构之单链表 单链表有后继结点,无前继结点. 以下实现: 创建单链表 打印单链表 获取单链表的长度 判断单链表是否为空 在单链表后插入数据 获取单链表指定位置的数据 获取单链表指定元素 ...
随机推荐
- ArcGIS根据最大最小坐标换算瓦片行列号
1.前言 在上一节中我们知道了屏幕上一像素等于实际中多少单位长度(米或经纬度)的换算方法,而知道这个原理后,接下来我们要怎么用它呢?它和我们前端显示地图有什么关联呢?这一节,我会尽量详细的将这两个问题 ...
- QGIS+GH + MapServer
拒绝描图,如何利用GH+QGIS完爆场地底图?http://www.sohu.com/a/251004986_657084 拒绝描图--爬取OSM数据绘制底图 所用软件 RHINO+GH\QGIS\G ...
- win7系统窗口背景颜色设置为护眼色的方法---打开的任意窗口显示为护眼色,程序眼必备
win7系统窗口背景颜色设置为护眼色的方法 1. 打开"窗口颜色与外观"对话框 方法1:从控制面板开始 控制面板\外观和个性化\个性化\窗口颜色和外观 方法2:桌面上鼠标右键,个性 ...
- java web eclipse中项目的加载过程
java web eclipse中项目的加载过程: Tomcat默认从WEB-INF/目录下加载资源,Eclipse在发布程序的时候,并没有把User Libraries的相关资源拷贝到WEB-INF ...
- 使用MTR命令诊断网络问题
以前在检查网络时习惯使用ping命令,因为ping命令非常简单,现在喜欢上了mtr命令,因为它真的很强大,但是对于刚刚接触这个命令的同学来说,理解起来就没有ping命令来的那么直观了,所以今天写一 ...
- asp.net使用SpeechSynthesizer类生成语音文件部署到iis遇到的几个坑
首先需要引入命名空间System.Speech.Synthesis,代码如下: using (var speechSyn = new SpeechSynthesizer()) { speechSyn. ...
- C#使用MongoDb来存储文件
近期在写一个小玩意,需要保存一些图片,以前我采用的是FTP或者直接数据库保存文件,用FTP来保存文件感觉比较麻烦,用数据库吧,还要改字段类型,修改代码,修改查询语句,懒得改. 以前看过mongonDb ...
- C# TinyMapper
https://github.com/TinyMapper/TinyMapper 据说性能蛮高的,我没对比测试过. NuGet安装下. 新增三个实体. public class A { public ...
- WPF点滴(1) Main 函数
应用程序的入口函数是main函数,在Console程序和Winform程序main函数都有清晰的定义,可以很容易找到,但是WPF的工程文件中却找不到main函数的定义,是WPF不需要main函数吗?N ...
- 基于MVC框架Aspose.Words打印到Word中写法
控件bin文件下载地址:https://download.csdn.net/download/u012949335/10610726 //前端打印写法 @{ ViewBag.Title = " ...