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数据结构之单链表 单链表有后继结点,无前继结点. 以下实现: 创建单链表 打印单链表 获取单链表的长度 判断单链表是否为空 在单链表后插入数据 获取单链表指定位置的数据 获取单链表指定元素 ...
随机推荐
- struts2和JSON的数据交互
一.实验环境 1.struts2基本包 2.json-plugin 在struts2的lib下可以找到. 3.web.xml 加入struts2 <filter> <filter-n ...
- PAT甲 1032. Sharing (25) 2016-09-09 23:13 27人阅读 评论(0) 收藏
1032. Sharing (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue To store Engl ...
- hdu 4956
http://acm.hdu.edu.cn/showproblem.php?pid=4956 首先给出一个范围 [l, r],问能否从中找到一个数证明 Hanamichi's solution 的解法 ...
- <context:component-scan>自动扫描
主要讲解自动扫描的<context:component-scan>中的2个子标签的使用方法 在Spring MVC中的配置中一般会遇到这两个标签,作为<context:compone ...
- [redis]Redis Transaction
https://github.com/phpredis/phpredis#transactions Transactions multi, exec, discard - Enter and exit ...
- Unidac连接出错:命名管道提供程序:管道的另一端上无任何进程.
环境: DELPHI XE ,UniDAC 6.2.8, (Options->Provider=prNativeClient) 程序编译后,放在Windows Server 2003 (sp2 ...
- Android 体系架构
什么是Android? 答:Android就是移动设备的软件栈,包括(一个完整的操作系统,中间件,关键应用程序), 底层是Linux内核,包括(安全管理, 内存管理,进程管理 ,电源管理,硬件驱动-) ...
- 将Heap RID转换成RID格式
使用DBCC PAGE命令查看索引叶子层中的索引键(最后一个参数为3才会显示索引键对应的HEAP RID)时,可以使用下面的SQL将HEAP RID转换成 FileId:PageId:SlotNo的格 ...
- [翻译]NUnit---RequiredAddin and RequiresMTA Attributes(十六)
RequiredAddinAttribute (NUnit 2.5) RequiredAddin特性用于提示一个程序集需要特殊的插件才能保证功能正常.如果没有安装插件,整个程序集会被标记为未运行. N ...
- Pipelines - .NET中的新IO API指引(三) 边看边记
Pipelines - .NET中的新IO API指引 作者 marcgravell 原文 此系列前两篇网上已有的译文 Pipelines - .NET中的新IO API指引(一) Pipeline ...