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. (并查集 建立关系)食物链 -- POJ-- 1182

    链接: http://poj.org/problem?id=1182 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82830#probl ...

  2. HDU1426 Sudoku Killer(DFS暴力) 2016-07-24 14:56 65人阅读 评论(0) 收藏

    Sudoku Killer Problem Description 自从2006年3月10日至11日的首届数独世界锦标赛以后,数独这项游戏越来越受到人们的喜爱和重视. 据说,在2008北京奥运会上,会 ...

  3. hdu 2153 仙人球的残影

    题目 这道题可以有两种写法: 第一种:找规律,如下: #include <stdio.h> int main() { int n,i,j,res; while (scanf("% ...

  4. hdu 4998 矩阵表示旋转

    http://acm.hdu.edu.cn/showproblem.php?pid=4998 http://blog.csdn.net/wcyoot/article/details/33310329 ...

  5. 【WinRT】让控件飞,WinRT 中实现 web 中的 dragable 效果

    由于在 xaml 体系中,控件没有传统 WebForm 中的 Left.Top.Right.Bottom 这些属性,取而代之的是按比例(像 Grid)等等的响应布局.但是,传统的这些设置 Left.T ...

  6. MySQL Route负载均衡与读写分离Docker环境使用

    Docker环境描述 主机名 部署服务 备注 MySQL Route MySQL Route 部署在宿主机上的MySQL Route服务 MySQL Master1 MySQL 5.7.16 Dock ...

  7. Python: 读写Excel(openpyxl / win32com.client)

    项目周报汇报的时候要做数据汇总,总是要从不同的excel文件中去获取数据最后汇总到一个excel表里面,所以决定用python直接写个自动化脚本来自动执行. 用python来读写excel,目前找了2 ...

  8. .Net Core + NGINX跳转登录时端口丢失

    使用.Net Core + NGINX部署到服务器的时候,如果端口不是使用默认的80端口,在跳转到登录页面时,URL中的端口丢失. NGINX的配置如下: server { listen ; loca ...

  9. C#通过盘符获取剩余空间

    public static long GetHardDiskSpace(string str_HardDiskName) { ; str_HardDiskName = str_HardDiskName ...

  10. IAP远程在线升级

    IAP远程在线升级 在上一篇中实现了LWIP网口通讯,那么肯定要加个在线升级功能,这个功能所占用的资源很少,但在物联网中很重要也很实用.在线升级就是像手机一样,先下载好系统,然后点击升级~然后就没然后 ...