Python数据结构与算法
GYT0313
邮箱:guyongtao@qq.com
展开
-
Python编写双向链表
1. 运行示例2. 代码double_list.py已经实现方法有限,可根据需要再次加工。"""双向链表实现:1.链表的创建2.节点的添加3.节点删除4.打印节点""""""链表结构的节点类"""class Node(object): def __init__(self, data, previous=None, next=None): ...原创 2019-04-15 16:52:10 · 527 阅读 · 0 评论 -
数据结构-用栈计算中缀表达式(过程解析)
题目原则准备两个栈s、t。从左向右扫描,遇到数字入栈s,遇到运算符c入栈t,运算符c与t栈顶的比较规则如下:运算符c > t 栈顶(优先级),则入栈运算符c <= t 栈顶(优先级),则t 出栈一个元素,s 出栈2个元素并计算后将计算后的值入栈s,直到t栈顶优先级大于c运算符c 为( ,则入栈,遇到) 时出栈( ) 之间的所有运算符解析从左向右扫描:s、t初始状...原创 2019-04-29 12:21:41 · 7320 阅读 · 0 评论 -
数据结构 - 哈希策略和冲突处理
1. 哈希策略访问集合中的项的最快的方法,是通过数组和基于数组的列表所支持的随机访问。假设第一个建是1500,剩下的键是连续性的数字。数组中一个给定的位置,可以通过表达式key - 1500 来计算。这种类型的计算叫做从键到地址的转换,或者称为哈希函数。哈希函数在一个给定的键上执行,并且返回其在数组中的相对位置。使用一种哈希策略的数组,叫做哈希表。如果哈希函数以常量时间运行,插入、访问和删除...原创 2019-05-04 16:17:48 · 858 阅读 · 0 评论 -
数据结构 - 初始化最大、最小堆
1. 堆堆分为最小堆和最大堆。最小堆:任意一个非叶节点小于其左子树和右子树最大堆:任意一个非叶节点大于其左子树和右子树2. 初始化堆的步骤首先根据序列构建一个完全二叉树(最大堆为例)在完全二叉树的基础上,从最后一个非叶结点开始调整(可理解为从右下角):比较三个元素的大小–自己,它的左孩子,右孩子。分为三种情况:自己最大,不用调整左孩子最大,交换该非叶结点与其左孩子的值,并考察...原创 2019-05-04 10:50:28 · 5516 阅读 · 1 评论 -
KMP模式匹配算法--计算字符串Next 函数值
原文地址https://www.nowcoder.com/test/question/done?tid=23688472&qid=169042#summaryKMP算法完!转载 2019-05-03 20:03:07 · 1674 阅读 · 1 评论 -
Python编写图集合
前言该篇博客介绍编写加权有向图的代码。代码可见Github:1. 运行示例导入模块并初始化图:from graph import *g = LinkedDirectedGraph()g.add_vertex("A")g.add_vertex("B")g.add_vertex("C")g.add_vertex("D")g.add_vertex("E")g.add_edg...原创 2019-04-23 22:17:56 · 577 阅读 · 0 评论 -
Python实现优先队列案例:急症室调度
前言使用优先队列来模拟“急症室调度”。优先队列基于单链表实现。病人patient 对象有两个变量:name-名称、condition-病情等级(1-3值越小越优先)。使用类似MVC形式编写完整代码GitHub:https://github.com/GYT0313/Python-DataStructure/tree/master/6-queue/er1. 运行示例示例中,先输入一...原创 2019-04-18 22:12:28 · 934 阅读 · 3 评论 -
Python实现最小生成树(Prim算法)
前言使用链表构建图,利用递归、栈实现Prim算法求取最小生成树。或许实现的结果与最小生成树的定义有区别,下面代码的结果是:穷举所有的节点,获取从任何顶点出发的一条最小权重的路径。(此代码是博主自己实现,可能存在一些找不全、甚至找不到结果的极端情况,如有错误敬请指正)文件集合:完整代码见GitHub:https://github.com/GYT0313/Python-DataStruct...原创 2019-04-27 11:04:06 · 17171 阅读 · 5 评论 -
Python编写单链表
代码list.py"""单链表实现:1.链表的创建2.节点的添加3.节点删除4.打印节点"""from node import Nodeclass Link(object): """单链表""" def __init__(self, data=None): self.head = None if data != None:...原创 2019-04-15 11:06:25 · 2769 阅读 · 0 评论 -
Python 实现队列(基于循环数组和单链表)、优先队列(单链表)
前言使用Python基于循环数组实现队列。队列符合先进先出(FIFO)原则。数组是基于列表定义的,更加严格的数据结构。假定有一个front 指向头部,rear指向尾部。默认数组容量为6。1. 代码运行示例:代码:超类文件:abstractcollection.py"""File: abstractcollection.pyAuthor: Ken Lambert"""c...原创 2019-04-17 20:02:51 · 878 阅读 · 0 评论 -
Python实现栈(基于数组和单链表两种)
前言使用Python 实现栈。两种实现方式:基于数组 - 数组同时基于链表实现基于单链表 - 单链表的节点时一个实例化的node 对象完整代码可见GitHub:https://github.com/GYT0313/Python-DataStructure/tree/master/5-stack目录结构:注:一个完整的代码并不是使用一个py文件,而使用了多个文件通过继承方式实现...原创 2019-04-17 18:02:13 · 693 阅读 · 0 评论 -
Python实现一维数组、二维网格和杂乱网格
前言代码整体框架已经实现,但细节方面如创建数组长度是否允许为0等并未实现。1. 一维数组arrays.py"""数组<variable> = Array(<capacity>, <option fill value>)"""class Array(object): def __init__(self, capacity, fill_val...原创 2019-04-14 21:28:15 · 2557 阅读 · 0 评论 -
Python实现二叉搜索树--基于链表实现
前言基于链表实现二叉搜索树。代码可见GitHub:https://github.com/GYT0313/Python-DataStructure/tree/master/8-tree运行示例代码abstractcollection.py"""File: abstractcollection.pyAuthor: Ken Lambert"""class AbstractCo...原创 2019-04-21 21:39:08 · 543 阅读 · 0 评论 -
优化递归调用斐波那锲数列--Python
代码:优化版的斐波那锲函数,使用了一个字典来保存已经调用过的、相同参数的值。"""3.6修改Fibonacci函数,使用记忆技术,接收一个字典保存参数和值。O(n)"""def fib_dic(n, dic, counter): if n < 3: return 1 keys = dic.keys() key = "fib({})".fo...原创 2019-04-14 11:31:13 · 457 阅读 · 0 评论 -
Python编写排序算法探测器
代码algorithms.pyimport random# O(n^2)def selection_sort(lyst, profiler): """选择排序""" i = 0 while i < len(lyst) - 1: min_index = i j = i + 1 while j < len(l...原创 2019-04-13 22:10:38 · 279 阅读 · 0 评论 -
Python编写选择排序、冒泡排序、插入排序和快速排序
代码import random# O(n^2)def selection_sort(lyst): """选择排序""" i = 0 while i < len(lyst) - 1: min_index = i j = i + 1 while j < len(lyst): if ly...原创 2019-04-13 22:01:24 · 434 阅读 · 0 评论 -
Python自定义实现列表--基于数组和双向循环链表两种方式
前言学习过Python 的肯定知道Python内置了List()抽象数据结构。不过,本篇博客在于自定义实现列表。这里,通过底层数据结构数组和链表来实现。其中数组是基于Python内置的List实现,链表过自定义node对象实现。文件结构:完整代码可见GitHub:1. 超类无论是基于数组还是链表,这里给出了两者的超类。abstractcollection.py"""File:...原创 2019-04-20 15:23:18 · 421 阅读 · 0 评论