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 -- 数据结构实现的更多相关文章

  1. python数据结构与算法

    最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...

  2. python数据结构与算法——链表

    具体的数据结构可以参考下面的这两篇博客: python 数据结构之单链表的实现: http://www.cnblogs.com/yupeng/p/3413763.html python 数据结构之双向 ...

  3. python数据结构之图的实现

    python数据结构之图的实现,官方有一篇文章介绍,http://www.python.org/doc/essays/graphs.html 下面简要的介绍下: 比如有这么一张图: A -> B ...

  4. Python数据结构与算法--List和Dictionaries

    Lists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着 list 操作执行的快慢. 当然他们也试图优化一些不常见的操作. 但是当权衡的时候,它们还 ...

  5. Python数据结构与算法--算法分析

    在计算机科学中,算法分析(Analysis of algorithm)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程.算法的效率或复杂度在理论上表示为一个函数.其定义 ...

  6. Python数据结构与循环语句

    # Python数据结构与循环语句:   首先编程是一项技能,类似跑步,期初不必在意细节,能使用起来就行,等学的游刃有余了再回过头来关注细节问题也不迟.  关于买书: 学会python之后,才需要买书 ...

  7. python数据结构之栈与队列

    python数据结构之栈与队列 用list实现堆栈stack 堆栈:后进先出 如何进?用append 如何出?用pop() >>> >>> stack = [3, ...

  8. python数据结构之树和二叉树(先序遍历、中序遍历和后序遍历)

    python数据结构之树和二叉树(先序遍历.中序遍历和后序遍历) 树 树是\(n\)(\(n\ge 0\))个结点的有限集.在任意一棵非空树中,有且只有一个根结点. 二叉树是有限个元素的集合,该集合或 ...

  9. Python数据结构之四——set(集合)

    Python版本:3.6.2  操作系统:Windows  作者:SmallWZQ 经过几天的回顾和学习,我终于把Python 3.x中的基础知识介绍好啦.下面将要继续什么呢?让我想想先~~~嗯,还是 ...

  10. Python数据结构之单链表

    Python数据结构之单链表 单链表有后继结点,无前继结点. 以下实现: 创建单链表 打印单链表 获取单链表的长度 判断单链表是否为空 在单链表后插入数据 获取单链表指定位置的数据 获取单链表指定元素 ...

随机推荐

  1. MySQL性能调优与架构设计——第13章 可扩展性设计之 MySQL Replication

    第13章 可扩展性设计之 MySQL Replication 前言: MySQL Replication 是 MySQL 非常有特色的一个功能,他能够将一个 MySQL Server 的 Instan ...

  2. Hdu1896 Stones(优先队列) 2017-01-17 13:07 40人阅读 评论(0) 收藏

    Stones Time Limit : 5000/3000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submis ...

  3. 图片转化为pdf(转)

    方法1: 利用Adobe公司的Adobe Acrobat Professional进行转化.注意,一定是Professional版本的,Reader版本没有这个功能.  首先安装Adobe Acrob ...

  4. C++ sort()函数的用法

    C++sort()函数的用法 C++sort()函数的用法 近来看了c++标准库这本书,学到了很多,就把这其中的一点C++sort()函数的用法写下来和大家分享吧! (一)为什么要用c++标准库里的排 ...

  5. bootstrap-table 中取主键字段的问题,主键名不叫id

    问题 :取不到数据行的主键 要绑定的数据字段 RoleId rolename adddate RoleId 为主键是唯一的 bootstraptable的配置 uniqueId: "Role ...

  6. SQL SERVER 2014--内存表实现秒杀场景

    ===================================== 网上针对“秒杀”的解决方案很多,数据拆分化解热点,READPAST解决锁问题,应用程序排队限制并发等等很多方式,各有优缺点, ...

  7. asp.net—工厂模式

    一.什么是工厂模式 定义:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类. 二.怎么使用工厂模式 首先模拟一个场景:有一个汽车工厂,  可以日本车.美国车.中国车... 这个场景怎么用工厂 ...

  8. 打开SQL2008R2配置工具,提示远程调用失败[0x800706be]

    卸载了Microsoft SQL Server 2012 Express LocalDB,依然不行. 再卸载Microsoft SQL Server 2014 LocalDB,此时右边显示框已可以显示 ...

  9. C#HttpUtility.UrlEncode 大写问题

    工作上和另一个公司对接,调对方的api需要用到md5加密,加密前要使用HttpUtility.UrlEncode,对方接口一直返回验证错误,定位了问题发现是中文编码使用HttpUtility.UrlE ...

  10. 利用MVC5+EF6搭建博客系统

    https://www.cnblogs.com/wyt007/p/7880137.html