数据结构
文章平均质量分 79
QiaoRuoZhuo
这个作者很懒,什么都没留下…
展开
-
自定义zip函数
'''使用了4种方法模拟实现zip(*seqs)的功能'''def myzip(*seqs): seqs = [list(s) for s in seqs] res = [] while all(seqs): res.append(tuple(s.pop(0) for s in seqs)) return res def my...原创 2019-11-27 22:19:07 · 281 阅读 · 0 评论 -
单链表逆置
单链表逆置是链表的基本操作之一,我分别用递归和非递归两种方式实现单链表(不含头结点)的逆置,代码还是比较简洁的,欢迎批评指正。原创 2014-11-22 17:00:02 · 1286 阅读 · 0 评论 -
图的割点(边表集实现)
在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合。求割点与桥的算法是R.Tarjan发明的。本文用边表集存储图的信息,实现了递归和非递归两种算法。原创 2014-11-21 08:27:03 · 1843 阅读 · 0 评论 -
《大话数据结构》读书笔记之线性表基本操作(单链表实现)
/*Name: 线性表抽象数据类型(使用单链表实现) Copyright: Author: 巧若拙 Date:11-09-14 23:34Description: */#include#include#include#include#define MAXSIZE 10#define OK 1#define ERROR 0#de原创 2014-09-11 23:33:20 · 864 阅读 · 1 评论 -
《大话数据结构》读书笔记之线性表基本操作(静态单链表实现)
/* Name: 线性表抽象数据类型(使用静态单链表实现) Copyright: Author: 巧若拙 Date:06-10-14 14:16 Description: 近一个月前我总结了线性表抽象数据类型(使用动态单链表实现),实际上更让我感兴趣的是静态链表。这种无需指针而有能够实现链表功能的结构,对于那些不支持指针的高级语言来原创 2014-10-06 17:17:26 · 1084 阅读 · 0 评论 -
《大话数据结构》读书笔记之栈抽象数据类型(链表实现)
/*Name: 栈抽象数据类型(使用链表实现) Copyright: Author: 巧若拙 Date:13-09-14 19:02Description: */#include#include#include#include#define MAXSIZE 10#define OK 1#define ERROR 0#defin原创 2014-09-13 19:45:12 · 646 阅读 · 0 评论 -
《大话数据结构》读书笔记之 队列抽象数据类型(数组实现循环队列)
/*Name: 队列抽象数据类型(使用数组实现循环队列) Copyright: Author: 巧若拙 Date:15/09/14 09:08Description: */#include#include#include#include#define MAXSIZE 10#define OK 1#define ER原创 2014-09-15 10:58:04 · 699 阅读 · 0 评论 -
(转载)一种简单而有趣的数据结构——并查集
一种简单而有趣的数据结构——并查集作者:goal00001111(高粱) 一个秘密生物武器落到某地区,导致当地村民丧失部分记忆,只认得自己最熟悉的人,而忘记自己是哪个村子的人了。大家汇集到一个广场,寻找自己同村的亲人。很不幸你就是其中的一员,记忆中只认得你的爸爸,妈妈还有妹妹了,然后爸爸又认出了叔叔,叔叔找到了婶婶,这样你们的家庭成员就逐渐扩大起来。 寻亲工作仍在继续,转载 2014-09-29 20:20:12 · 1301 阅读 · 0 评论 -
线索二叉树小结
/*Name: 线索二叉树Copyright:Author: 巧若拙 Date: 30-09-14 22:13Description: 遍历二叉树是以一定规则将二叉树中结点排列成一个线性序列,得到二叉树中结点的先序,中序或后序序列。这实际上是对一个非线性结构进行线性化操作,使每个结点(除第一个和最后一个外)在这些线性序列中有且仅有一个直接前驱和直接后继。但是原创 2014-10-01 00:07:28 · 762 阅读 · 0 评论 -
最小优先队列基本操作
最小优先队列基本操作:void Insert(MinPQue *q, ElemType x);//把元素x插入队列S中ElemType MinKeyword(MinPQue q);//返回队列S中具有最小关键字的元素(即vec[0])ElemType ExtractMin(MinPQue *q);//删除并返回队列S中具有最小关键字的元素(即vec[0])void ChangeKey(MinPQue *q, int pos, ElemType k);//将第pos个元素的关键字值改为kint Se原创 2014-11-24 22:35:46 · 911 阅读 · 0 评论 -
最小生成树( 克鲁斯卡尔算法)
使用克鲁斯卡尔算法最小生成树,采用的数据结构是三元组边表集,采用了快排和并查集,代码很简洁,效率也高。和前面两个求最小生成树算法一样,程序还能自动生成图信息,快来看看吧。原创 2014-12-01 21:34:29 · 1076 阅读 · 0 评论 -
队列类(分别用列表和链表实现)
#!/usr/bin/python3class QueueUnderflow(ValueError): passclass ListQueue(): #列表实现循环队列类 def __init__(self, len_=8): self.__len = len_ self.__elems = [0] * len_ #默认每个元素都是0 ...原创 2018-12-14 08:13:11 · 545 阅读 · 0 评论 -
栈类(分别用列表和链表实现)
#!/usr/bin/python3class StackUnderflow(ValueError): passclass ListStack(): def __init__(self): self.__elems = [] def __len__(self): return len(self.__elems) def ...原创 2018-12-12 14:51:01 · 275 阅读 · 1 评论 -
拓扑排序之关键路径
采用广度优先搜索进行拓扑排序,获取拓扑序列的同时计算各顶点事件的最早发生时间,然后逆序计算各顶点事件的最晚发生时间。本文是《大话数据结构》的读书笔记,但算法实现与《大话数据结构》完全不同,自我感觉比书上的算法要简洁,呵呵!原创 2014-11-17 23:03:15 · 1054 阅读 · 0 评论 -
拓扑排序之关键路径(深度优先搜索)
采用深度优先搜索进行拓扑排序,获取拓扑序列的同时计算各顶点事件的最早发生时间,然后逆序计算各顶点事件的最晚发生时间。本文是《大话数据结构》的读书笔记,在输出关键路径时采用深度优先搜索输出关键路径,能输出多条关键路径。原创 2014-11-18 22:04:15 · 3656 阅读 · 0 评论 -
洛谷在线测试P3378_模板堆
/* Name: P3378_模板堆 Copyright: Author: Date: 01-03-17 07:35 Description: P3378 【模板】堆如题,初始小根堆为空,我们需要支持以下3种操作:操作1: 1 x 表示将x插入到堆中操作2: 2 输出该小根堆内的最小数操作3: 3 删除该小根堆内的最小数输入输出格式输入格式:第一行包含一原创 2017-03-03 14:03:56 · 1202 阅读 · 0 评论 -
priority_queue的重载运算符原理
#include using namespace std; (记得包含头文件噢) 1. priority_queue在STL内部定义的原型是: template class Sequence=vector , classCompare=less > (主要,要一个空格,否则编译器会当做右转载 2017-03-02 08:50:35 · 2055 阅读 · 0 评论 -
最小堆类
实现了一个简单的最小堆类,其中上滤和下滤的算法还是比较经典的原创 2017-02-28 16:05:42 · 481 阅读 · 0 评论 -
最小栈原理及其基本操作
最小栈除了能实现普通栈的操作外,还能以O(1)的时间复杂度返回和更新栈中的最小值。本文除了详细解释最小栈,还推广到最大栈,相信聪明的你一定能举一反三。原创 2014-12-07 20:32:36 · 878 阅读 · 0 评论 -
图的割点(邻接矩阵实现)
在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合。求割点与桥的算法是R.Tarjan发明的,本文用邻接矩阵存储图的信息,实现了递归和非递归两种算法。 感觉非递归算法或许有更好的表达,但一时想不出来,请大牛指点,谢谢!原创 2014-11-21 21:11:01 · 1568 阅读 · 0 评论 -
高精度浮点数运算
本程序实现了高精度浮点数的加法,减法,乘法,乘方和除法运算,有效数字精确到MAX。 为了便于进位,本程序采用了较为独特的数据结构,即把浮点数分成整数和小数部分,分别存储在两个不同的数组中。其中整数部分数字存储在ValInt[MAX-lenInt...MAX) ,小数部分数字存储在ValDec[1...lenDec],ValDec[0]用来存储进位或借位。这样在计算中补齐0的时候不需要移动数组元素,只需移动下标即可,大大提升了效率。原创 2014-11-08 10:13:20 · 6412 阅读 · 2 评论 -
《大话数据结构》读书笔记之栈抽象数据类型(数组实现)
/*Name: 栈抽象数据类型(使用数组实现) Copyright: Author: 巧若拙 Date:13-09-14 18:28Description: */#include#include#include#include#define MAXSIZE 10#define OK 1#define ERROR 0#defin原创 2014-09-13 19:42:15 · 758 阅读 · 0 评论 -
二叉排序树基本操作详解
二叉排序树基本操作详解巧若拙(欢迎转载,但请注明出处:http://blog.csdn.net/qiaoruozhuo)所谓二叉排序树,指的是一棵空二叉树,或者是一棵具有如下特性的非空二叉树:1。若它的左子树非空,则左子树上所有结点的值均小于根结点的值;2。若它的右子树非空,则右子树上所有结点的值均大于根结点的值;3。左,右子树本身又各是一棵二叉排序树。 二叉排序原创 2014-10-04 17:56:14 · 2731 阅读 · 1 评论 -
Prime算法求最小生成树 (邻接表)
实现了 Prime算法求最小生成树 (邻接表)的普通算法和最小堆优化算法。原创 2014-11-26 18:36:42 · 2324 阅读 · 0 评论 -
Prime算法求最小生成树 (邻接矩阵)
实现了 Prime算法求最小生成树 (邻接矩阵)的普通算法和最小堆优化算法。原创 2014-11-26 14:03:20 · 3380 阅读 · 0 评论 -
稀疏矩阵的十字链表存储表示
除了用三元组顺序表来存储压缩矩阵,我们还可以用链表结构来存储,实际上后者应用更广泛,因为当非零元素的数目较大时,三元组的时间复杂度实在太高。链表结构中最常见的是十字链表,在十字链表中,稀疏矩阵每一行用一个带头结点的循环链表表示,每一列也用一个带头结点的循环链表表示。在这个结构中,除头结点外,每个结点都代表矩阵中的一个非零元素,它由5个域组成:行域(row),列域(col),数据域(data),向下域(down)和向右域(right)。原创 2014-10-29 21:35:49 · 3825 阅读 · 0 评论 -
稀疏矩阵的三元组顺序表存储及矩阵相乘算法小结
详细介绍了三元组存储稀疏矩阵的快速转置算法,重点介绍矩阵乘法的三种不同实现,尤其最后一种快速乘法,先把其中一个矩阵转置,再各行对应元素相乘,思想新颖,代码简洁,值得一看。原创 2014-10-27 21:24:54 · 11360 阅读 · 4 评论 -
稀疏矩阵的三元组顺序表存储表示及基本操作
/*Name: 稀疏矩阵的三元组顺序表存储表示及各种 Copyright: Author: 巧若拙 Date: 27-10-14 21:28Description: ------------------------------------------------------------------------------在实际应用中,我们经常碰到这样一类矩阵,它们的非零原创 2014-10-27 21:32:39 · 25011 阅读 · 3 评论 -
《大话数据结构》读书笔记之二叉堆基本操作(最大堆)
/*Name: 二叉堆基本操作(最大堆) Copyright: Author: 巧若拙 Date: 24-09-14 20:26Description: 实现的最大堆的基本操作,包括向上,或向下调整二叉堆的第pos个元素,使其满足最大堆的特征;构造最大堆,利用最大堆进行堆排序和找第k大的数。如果要构造最小堆,则只需改变一下调整二叉堆时判断的条件即可。 */原创 2014-09-25 20:36:59 · 803 阅读 · 0 评论 -
拓扑排序之变量序列算法分析
分别用邻接表和边表集两种数据结构存储图的顶点和边信息。分别用深度优先搜索和广度优先搜索实现了拓扑排序。对拓扑排序感兴趣的同学可以参考下。原创 2014-11-17 20:57:21 · 1034 阅读 · 0 评论 -
拓扑排序之变量序列代码
假设有n个变量(1<=n<=26,变量名用单个小写字母表示),还有m个二元组(u,v),分别表示变量u小于v。那么,所有变量从小到大排列起来应该是什么样子的呢? 例如有4个变量a,b,c,d,若以知a<b,c<b,d<c,则这4个变量的排序可能是a<d<c<b。尽管还有可能其他的可能,你只需找出其中的一个即可。原创 2014-11-17 20:24:50 · 1100 阅读 · 0 评论 -
赫夫曼编码(优先队列实现)
采用优先队列把一个普通线性表改造成赫夫曼树,再进行赫夫曼编码,得到一个同时记录了明文和对应编码的密码本。使用优先队列(最小堆)构造赫夫曼树是一种高效的方法,比每次都遍历整个线性表要快很多。我在构造密码本时确保密码本数组递增排序,这样每次插入新结点时可以折半查找插入,效率较高。有序的密码本在把明文编码成密文时也可以大大提高查找效率。原创 2014-09-28 12:25:39 · 1550 阅读 · 0 评论 -
线索二叉树基本操作详解
线索二叉树基本操作详解巧若拙(欢迎转载,但请注明出处:http://blog.csdn.net/qiaoruozhuo) 遍历二叉树是以一定规则将二叉树中结点排列成一个线性序列,得到二叉树中结点的先序,中序或后序序列。这实际上是对一个非线性结构进行线性化操作,使每个结点(除第一个和最后一个外)在这些线性序列中有且仅有一个直接前驱和直接后继。但是,当以二叉链表作为存储结构时,只能原创 2014-10-02 09:38:01 · 2878 阅读 · 0 评论 -
根据先中序序列或后中序序列确定二叉树
根据后中序序列生成二叉树:从后序序列中找到二叉树(或者子树)的根结点,然后在中序序列找到该根结点,根结点将中序序列分成左右两部分,左边为左子树,右边为右子树。根据中序序列确定左子树的长度,确定左子树中最右下根结点在后序序列中的位置,从而可以确定左右子树在后中序序列中的范围,然后递归的生成左右子树。原创 2014-10-03 11:36:52 · 2853 阅读 · 0 评论 -
《大话数据结构》读书笔记之线性表基本操作(数组实现)
/*Name: 线性表抽象数据类型(使用数组实现) Copyright: Author: 巧若拙 Date: 08-09-14 14:38Description: */#include#include#include#include#define MAXSIZE 10#define OK 1#define ERROR 0#de原创 2014-09-08 16:09:17 · 679 阅读 · 1 评论 -
《大话数据结构》读书笔记之线性表抽象数据类型(双向循环链表实现)
/*Name: 线性表抽象数据类型(使用双向循环链表实现) Copyright: Author: 巧若拙 Date:13-09-14 17:07Description: */#include#include#include#include#define MAXSIZE 10#define OK 1#define ERROR 0原创 2014-09-13 19:39:14 · 855 阅读 · 1 评论 -
有序链表的合并
有序链表的合并是单链表的基本操作之一,本文分别用递归和非递归两种方式实现两个有序链表(不含头结点)的合并。原创 2014-11-22 18:11:43 · 1058 阅读 · 1 评论 -
迷宫问题
分别实现了广度优先搜索和深度优先搜索最短路径算法,还给出了深度优先搜索路径(非最短路径)的递归和非递归两种算法。 地图的设计可选择机器随机设计和人工设计,还可以进行人工修改地图。原创 2014-11-11 22:37:33 · 1183 阅读 · 0 评论 -
最短路径算法集锦
列举了深度优先搜索的递归和非递归算法,Dijkstra最短路径算法, 基于Bellman-Fort最短路径算法的改进型广度优先搜索算法, Floyd-Warshall最短路径算法的原始版和变化版 本文是阅读《啊哈!算法》后的学习笔记,代码与教材中有些差异,若有错误请指正,谢谢!原创 2014-11-13 22:27:28 · 1315 阅读 · 1 评论