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. 信息管理代码分析<一>登录密码

    题解:这段代码的要求如下,输入一段字符密码(长度<=8)以二进制的形式存放在磁盘中,在输入时需要验证两次输入是否正确.第二个,登录.从磁盘中读取这个文件,然后再输入密码,看两者是否相同. 登录密 ...

  2. 第二届普适计算和信号处理及应用国际会议论文2016年 The 2nd Conference on Pervasive Computing, Signal Processing and Applications(PCSPA, 2016)

    A New Method for Mutual Coupling Correction of Array Output Signal 一种阵列输出信号互耦校正的新方法 Research of Robu ...

  3. crosss compile VLC with OpenMAX on ARM board(RockChip RK3399),in order to use Hard Acceleration when decode video

    reference:http://www.x90x90x90.com/en/raspberry-pi-3-howto-compile-vlc-with-hardware-acceleration/ 1 ...

  4. ajax如何向后台传递数组,在后台该如何接收的问题(项目积累)

    一.后台如何接收从前台接收的数组: 使用request.getParameterValues(String xxx); <input type="text" name=&qu ...

  5. [leetcode] 14. Climbing Stairs

    这道题leetcode上面写着是DP问题,问题是我一开始写了个简单的递归结果直接超时,所以没办法只好拿迭代来做了.题目如下: You are climbing a stair case. It tak ...

  6. boot分区剩余空间不足

      Linux boot分区用于存放内核文件以及Linux一些启动配置文件,一般情况下分区大小为500M足够使用,如果出现空间不足的问题可以使用以下方法来解决. 查看已经安装的内核 dpkg --ge ...

  7. DBCC--OPENTRAN

    返回最早开始的但仍在运行的事务 数据库 'DB1' 的事务信息. 最早的活动事务: SPID (服务器进程 ID): 60 UID (用户 ID): -1 名称          : user_tra ...

  8. CSS盒子坍塌问题的4种解决方案

    一.问题重述 嗯,这个就是坍塌的盒子了.外部盒子本应该包裹住内部的两个浮动盒子,结果却没有. 二.问题出现的原因 3个盒子都只设置了width,而没有规定height,内部两个盒子分别设置了左右浮动. ...

  9. C# 读取Excel表格内容,以及NPOI的使用

    在实际的开发中,我们可能需要读写word或者Excel的内容,在我开发的项目中,需要读取Excel的内容,并将相对应的内容存储到数据库中,这里简单跟大家分享一下,希望能够帮助一些人. 我相信在读写wo ...

  10. asp.net 进行发送邮箱验证

    利用发送邮件验证码进行注册验证 需要引用using System.Net.Mail;命名空间 #region /// <summary> /// 发送邮件 /// </summary ...