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数据结构之单链表 单链表有后继结点,无前继结点. 以下实现: 创建单链表 打印单链表 获取单链表的长度 判断单链表是否为空 在单链表后插入数据 获取单链表指定位置的数据 获取单链表指定元素 ...
随机推荐
- C++中的数组问题
C++中的数组问题 1. 数组赋值与初始化 (1)直接初始化: ]={,,}: (2)遍历访问初始化: ;i< ;i++) //直接读入,或者用别的数组,以及别的(i+1)等. (3)内存操作函 ...
- hdu 2189 悼念512汶川大地震遇难同胞——来生一起走
题目 这道题用了,埃式筛选法和背包,我自己没有做出来,看了别人的代码,我也做不出来,特别是c[j]+=c[j-b[i]];弄了好久都没有弄懂. 这道题的解题思路:主要是先把150以内的所有素数找出来, ...
- hdu 5017 模拟退火/三分求椭圆上离圆心最近的点的距离
http://acm.hdu.edu.cn/showproblem.php?pid=5017 求椭圆上离圆心最近的点的距离. 模拟退火和三分套三分都能解决 #include <cstdio> ...
- iOS Development和iOS Distribution有什么区别
http://zhidao.baidu.com/link?url=T9od33JuA7jjxzfyV-wOjuVLSNUaqpc9aoCu2HjfYfHBuRLW1CNDii0Bh9uvG6h-GeJ ...
- Sending Email In .NET Core 2.0
Consider the following written in .NET Core 2.0. SmtpClient client = ) { UseDefaultCredentials = tru ...
- 2D Circular Geometry Kernel ( Geometry Kernels) CGAL 4.13 -User Manual
1 Introduction The goal of the circular kernel is to offer to the user a large set of functionalitie ...
- Struts2乱码问题的解决办法
乱码问题的起因在于数据在web系统的各个层中间传递的时候编码不同,比如页面使用GB18030而中间层使用UTF-8.由于struts2默认使用的就是UTF-8编码,所以在页面如果使用的是其他的编码格式 ...
- neutron openvswitch + vxlan 通讯
- CentOS 7 - 安装Eclipse
注意问题:Eclipse官方网站提供的tar文件有可能有问题,我今天下载的一个tar文件,在Windows下解压缩,随后放到CentOS 7里面不行,随后我又重新下载一份,还是不行,最终我下载了另外一 ...
- CentOS 7 - 最小化安装后,安装GNOME!!
CentOS 7的最小化安装,并没有安装任何X Window,GNOME是比较好的一个X Window,我决定安装GNOME! 通过yum grouplist命令,我发现GNOME已经处于可以安装列表 ...