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. B-tree B+tree适合文件系统索引和MySQL索引

    B-树 B-树,这里的 B 表示 balance( 平衡的意思),B-树是一种多路自平衡的搜索树 它类似普通的平衡二叉树,不同的一点是B-树允许每个节点有更多的子节点.下图是 B-树的简化图. B-树 ...

  2. java反射中的动态代理机制(有实例)

    在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的 ...

  3. CAS实战の简介

    一.SSO简介 单点登录的英文名称为Single Sign-On,简写为SSO,它是一个用户认证的过程,允许用户一次性进行认证之后,就访问系统中不同的应用:而不需要访问每个应用时,都重新输入密码.IB ...

  4. net 串口通讯 网口通讯(Socket)

    1.串口通讯 2.网口(Socket) 源码下载:源码附件

  5. .Net Core 自定义配置源从配置中心读取配置

    配置,几乎所有的应用程序都离不开它..Net Framework时代我们使用App.config.Web.config,到了.Net Core的时代我们使用appsettings.json,这些我们再 ...

  6. HTML5 canvas 学习

    一.canvas简介 ​ <canvas> 是 HTML5 新增的,一个可以使用脚本(通常为JavaScript)在其中绘制图像的 HTML 元素.它可以用来制作照片集或者制作简单(也不是 ...

  7. sql server生成自动增长的字母数字字符串

    在开发的过程中,我们经常会遇到要生成一些固定格式字符串,例如“BX201903150001”,结构为:BX+日期+N位序号,类似这种的字符串我们很难生成,在这里我们借助一个存储过程来实现这个功能. 1 ...

  8. 3-WIN10系统及开发工具支持

    本篇博客对应视频讲解 回顾 上一讲说了编程的方向和技术流派以及选择入门语言的建议.当我们决定我们的选择之后呢,我们就要学习和进行实践操作了.但在实践之前,我们仍然需要做好相应的准备,这也就是今天要讲的 ...

  9. UCS2-little endian转码(utf16)

    public static void readFile(){ BufferedReader in = null; try { in = new BufferedReader(new InputStre ...

  10. s11 day105