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数据结构之单链表 单链表有后继结点,无前继结点. 以下实现: 创建单链表 打印单链表 获取单链表的长度 判断单链表是否为空 在单链表后插入数据 获取单链表指定位置的数据 获取单链表指定元素 ...
随机推荐
- nodejs中如何使用mysql数据库[node-mysql翻译]
nodejs中如何使用mysql数据库 db-mysql因为node-waf: not found已经不能使用,可以使用mysql代替. 本文主要是[node-mysql]: https://www. ...
- Freetype字体引擎分析与指南
Freetype字体引擎分析与指南,很不错的一篇教程,推荐!!
- Java IO流详尽解析(转)
流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
- SyntaxError: Non-ASCII character '\xe5' in file test.py on line 1, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
python的默认编码文件是用的ASCII码,而你的python文件中使用了中文等非英语字符. 在Python源文件的最开始一行,加入一句: # coding=UTF-8
- codis服务部署前的操作及初始化
1.检查服务器ipv6模块是否打开,如果打开需要禁用ipv6,防止codis-dashbord连接zookeeper失败. 因为不确定codis-dashbord服务连接zookeeper使用ipv4 ...
- 记一次IIS站点出错的解决过程
记一次IIS站点出错的解决过程 以前一直都是人家用着系统出问题了反馈过来这边改,没想到这回就发生在自己使用的过程中 问题经过 我正在执行一个操作,保存了没有返回提示,打开浏览器控制台查看网络,请求返回 ...
- .NET Core MemoryCache缓存获取全部缓存键
在Core中不能使用原HttpRuntime.Cache缓存,改为MemoryCache(Microsoft.Extensions.Caching.Memory). 现MemoryCache新版为2. ...
- MVC下使用Areas
(一) 为什么要分离 MVC项目各部分职责比较清晰,相比较ASP.NET Webform而言,MVC项目的业务逻辑和页面展现较好地分离开来,这样的做法有许多优点,比如可测试,易扩展等等.但是在实际的开 ...
- C#构造方法(函数)
一.概括 1.通常创建一个对象的方法如图: 通过 Student tom = new Student(); 创建tom对象,这种创建实例的形式被称为构造方法. 简述:用来初始化对象的,为类的成员赋值 ...
- Redis持久化策略(RDB &AOF)
redis持久化的几种方式 1.前言 Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合.支持在服 ...