1.堆栈(pyStack.py)

  1. class PyStack:
  2. def __init__(self, size=20):
  3. self.stack = []
  4. self.size = size
  5. self.top = -1
  6. def setSize(self, size):
  7. self.size = size
  8. def push(self, element):
  9. if self.isFull():
  10. raise IndexError
  11. else:
  12. self.stack.append(element)
  13. self.top += 1
  14. def pop(self):
  15. if self.isEmpty():
  16. raise 'PyStackUnderflow'
  17. else:
  18. element = self.stack[-1]
  19. self.top -= 1
  20. del self.stack[-1]
  21. return element
  22. def getTop(self):
  23. return self.top
  24. def empty(self):
  25. self.stack = []
  26. self.top = -1
  27. def isEmpty(self):
  28. if self.top == -1:
  29. return True
  30. else:
  31. return False
  32. def isFull(self):
  33. if self.top == self.size-1:
  34. return True
  35. else:
  36. return False
  37.  
  38. if __name__ == '__main__':
  39. stack = PyStack()
  40. for i in range(10):
  41. stack.push(i)
  42. print('栈顶是:', stack.getTop())
  43. for i in range(10):
  44. print(stack.pop())
  45. stack.empty()
  46. for i in range(21):
  47. stack.push(i)

2.队列(PyQueue.py)

  1. class QueueException(Exception):
  2. def __init__(self, info):
  3. super(QueueException, self).__init__()
  4. print('队列异常:', info)
  5.  
  6. class PyQueue:
  7. def __init__(self, size=20):
  8. self.queue = []
  9. self.size = 20
  10. self.end = -1
  11. def setSize(self, size):
  12. self.size = size
  13. def inQueue(self, element):
  14. if self.end < self.size-1:
  15. self.queue.append(element)
  16. self.end += 1
  17. else:
  18. raise QueueException('队尾越界')
  19. def outQueue(self):
  20. if self.end != -1:
  21. element = self.queue[0]
  22. self.queue = self.queue[1:]
  23. self.end -= 1
  24. return element
  25. else:
  26. raise QueueException('队头越界')
  27. def getEndIndex(self):
  28. return self.end
  29. def empty(self):
  30. self.queue = []
  31. self.end = -1
  32.  
  33. if __name__ == '__main__':
  34. queue = PyQueue()
  35. for i in range(20):
  36. queue.inQueue(str(i)*3)
  37. print('队尾Index:', queue.getEndIndex())
  38. for i in range(20):
  39. print(queue.outQueue())
  40. # queue.outQueue()

3.树(PyTree.py)

  1. G = ['G', []]
  2. H = ['H', []]
  3. I = ['I', []]
  4. K = ['K', []]
  5. D = ['D', []]
  6. E = ['E', [G, H, I, K]]
  7. F = ['F', []]
  8. A = ['A', [D, E]]
  9. B = ['B', []]
  10. C = ['C', [F]]
  11. Root = ['Root', [A, B, C]]
  12. print(Root)

4.二叉树(pyBTree.py)

  1. class BTree:
  2. def __init__(self, value):
  3. self.value = value
  4. self.left = None
  5. self.Right = None
  6. def insertLeft(self, value):
  7. self.left = BTree(value)
  8. return self.left
  9. def insertRight(self, value):
  10. self.right = BTree(value)
  11. return self.right
  12. def show(self):
  13. print(self.value)
  14. if __name__ == '__main__':
  15. Root = BTree('Root')
  16. A = Root.insertLeft('A')
  17. C = A.insertLeft('C')
  18. D = A.insertRight('D')
  19. F = D.insertLeft('F')
  20. G = D.insertRight('G')
  21. B = Root.insertRight('B')
  22. E = B.insertRight('E')
  23. Root.show()
  24. Root.left.show()
  25. Root.right.show()
  26. Root.right.right.show()

5.二叉树的遍历(pyBTreeTraversal.py)

  1. class BTree:
  2. def __init__(self, value):
  3. self.value = value
  4. self.left = None
  5. self.right = None
  6. def insertLeft(self, value):
  7. self.left = BTree(value)
  8. return self.left
  9. def insertRight(self, value):
  10. self.right = BTree(value)
  11. return self.right
  12. def show(self):
  13. print(self.value)
  14. def preOrder(self):
  15. self.show()
  16. if self.left:
  17. self.left.preOrder()
  18. if self.right:
  19. self.right.preOrder()
  20. def inOrder(self):
  21. if self.left:
  22. self.left.inOrder()
  23. self.show()
  24. if self.right:
  25. self.right.inOrder()
  26. def postOrder(self):
  27. if self.left:
  28. self.left.postOrder()
  29. if self.right:
  30. self.right.postOrder()
  31. self.show()
  32.  
  33. Root = BTree('Root')
  34. A = Root.insertLeft('A')
  35. C = A.insertLeft('C')
  36. D = A.insertRight('D')
  37. F = D.insertLeft('F')
  38. G = D.insertRight('G')
  39. B = Root.insertRight('B')
  40. E = B.insertRight('E')
  41. Root.postOrder()

6.图的构造以及路径查找(pyGraph.py)

注意:(list).sort(key=len)按长度排序

  也可以写成sorted((list), key=len)

  默认排序是index

  Python3里的(list).sort()已不支持lambda表达式

  1. def searchGraph(graph, start, end):
  2. results = []
  3. generatePath(graph, [start], end, results)
  4. results.sort(key=len)
  5. return results
  6. def generatePath(graph, path, end, results):
  7. state = path[-1]
  8. if state==end:
  9. results.append(path)
  10. # path = []
  11. else:
  12. for arc in graph[state]:
  13. if arc not in path:
  14. generatePath(graph, path+[arc], end, results)
  15.  
  16. if __name__=='__main__':
  17. Graph = {'A': ['B', 'C', 'D'],
  18. 'B': ['E'],
  19. 'C': ['D', 'F'],
  20. 'D': ['B', 'E', 'G'],
  21. 'E': [],
  22. 'F': ['D', 'G'],
  23. 'G': ['E']}
  24. paths = searchGraph(Graph, 'A', 'D')
  25. for i in paths:
  26. 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. struts2和JSON的数据交互

    一.实验环境 1.struts2基本包 2.json-plugin 在struts2的lib下可以找到. 3.web.xml 加入struts2 <filter> <filter-n ...

  2. 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 ...

  3. hdu 4956

    http://acm.hdu.edu.cn/showproblem.php?pid=4956 首先给出一个范围 [l, r],问能否从中找到一个数证明 Hanamichi's solution 的解法 ...

  4. <context:component-scan>自动扫描

    主要讲解自动扫描的<context:component-scan>中的2个子标签的使用方法 在Spring MVC中的配置中一般会遇到这两个标签,作为<context:compone ...

  5. [redis]Redis Transaction

    https://github.com/phpredis/phpredis#transactions Transactions multi, exec, discard - Enter and exit ...

  6. Unidac连接出错:命名管道提供程序:管道的另一端上无任何进程.

    环境: DELPHI XE ,UniDAC 6.2.8, (Options->Provider=prNativeClient) 程序编译后,放在Windows Server 2003 (sp2 ...

  7. Android 体系架构

    什么是Android? 答:Android就是移动设备的软件栈,包括(一个完整的操作系统,中间件,关键应用程序), 底层是Linux内核,包括(安全管理, 内存管理,进程管理 ,电源管理,硬件驱动-) ...

  8. 将Heap RID转换成RID格式

    使用DBCC PAGE命令查看索引叶子层中的索引键(最后一个参数为3才会显示索引键对应的HEAP RID)时,可以使用下面的SQL将HEAP RID转换成 FileId:PageId:SlotNo的格 ...

  9. [翻译]NUnit---RequiredAddin and RequiresMTA Attributes(十六)

    RequiredAddinAttribute (NUnit 2.5) RequiredAddin特性用于提示一个程序集需要特殊的插件才能保证功能正常.如果没有安装插件,整个程序集会被标记为未运行. N ...

  10. Pipelines - .NET中的新IO API指引(三) 边看边记

    Pipelines - .NET中的新IO API指引 作者 marcgravell  原文 此系列前两篇网上已有的译文 Pipelines - .NET中的新IO API指引(一) Pipeline ...