数据结构
风中舵手
个性、快乐、勇气
展开
-
数据结构(二)——单链表 、带头结点的单链表、循环链表 及其实现
一、 链式存储 以结点的形式存储数据。除了存放一个结点的信息外,还需附设指针。 数据在内存中存储是不连续的,每个结点只能也只有它能知道下一个结点的存储位置。 二、单链表 单链表是线性表链式存储的一种,其储存不连续。单链表的数据结构中包含两个变量:数据和指向下一结点的指针。转载 2016-03-29 17:10:04 · 1156 阅读 · 0 评论 -
海量数据处理算法—Bit-Map
1. Bit Map算法简介 来自于《编程珠玑》。所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。2、 Bit Map的基本思想 我们先来看一个具体的例子,假设我们要对0-7内的5个元素(4,7,2,5,3)排序(这转载 2016-05-18 11:07:11 · 202 阅读 · 0 评论 -
C语言字符串操作函数
C语言字符串操作函数1. 字符串反转 - strRev2. 字符串复制 - strcpy3. 字符串转化为整数 - atoi4. 字符串求长 - strlen5. 字符串连接 - strcat6. 字符串比较 - strcmp7. 计算字符串中的元音字符个数8. 判断一个字符串是否是回文1. 写一个函数实现字符串反转版本1 - while版转载 2016-05-19 16:34:55 · 284 阅读 · 0 评论 -
C语言常见字符串面试题
一些常用字符串操作函数的内部实现 memset:/* * memset - Fill a region of memory with the given value * @s: Pointer to the start of the area. * @c: The byte to fill the area with * @c转载 2016-05-19 16:38:36 · 582 阅读 · 0 评论 -
数据结构关于AOV与AOE网的区别
AOV网,顶点表示活动,弧表示活动间的优先关系的有向图。 即如果a->b,那么a是b的先决条件。AOE网,边表示活动,是一个带权的有向无环图, 其中顶点表示事件,弧表示活动,权表示活动持续时间。按我理解,你要求拓扑序列就是AOV,求关键路径就是AOEAOV-网 :用顶点表示活动,用弧表示活动间的优先关系的有向图称为顶点表 示活动的网(Ac转载 2016-07-11 17:08:42 · 6051 阅读 · 0 评论 -
拓扑排序
拓扑排序一.定义 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若 ∈E(G),则u在线性序列中出现在v之前。 通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。 注意: 1)只有有向无环图转载 2016-07-04 19:36:02 · 194 阅读 · 0 评论 -
图的邻接表存储 c实现
用到的数据结构是一个是顶点表,包括顶点和指向下一个邻接点的指针一个是边表, 数据结构跟顶点不同,存储的是顶点的序号,和指向下一个的指针刚开始的时候把顶点表初始化,指针指向null。然后边表插入进来,是插入到前一个,也就是直接插入到firstedge指向的下一个,而后面的后移 [cpp] view plain copy print?转载 2016-07-04 19:36:58 · 282 阅读 · 0 评论 -
最小生成树Prim算法理解
MST(Minimum Spanning Tree,最小生成树)问题有两种通用的解法,Prim算法就是其中之一,它是从点的方面考虑构建一颗MST,大致思想是:设图G顶点集合为U,首先任意选择图G中的一点作为起始点a,将该点加入集合V,再从集合U-V中找到另一点b使得点b到V中任意一点的权值最小,此时将b点也加入集合V;以此类推,现在的集合V={a,b},再从集合U-V中找到另一点c使得点c到V中任转载 2016-07-05 15:12:03 · 206 阅读 · 0 评论 -
图之Dijkstra算法
Dijkstra算法是一种求单源最短路的算法,即从一个点开始到所有其他点的最短路。其步骤如下:C语言实现如下:(使用邻接矩阵存储)[cpp] view plain copy#include转载 2016-06-20 21:15:18 · 311 阅读 · 0 评论 -
Floyd算法
Floyd算法作者:silence、2012年5月15日本文参考:Google,数据结构(C语言)本人声明:个人原创,转载请注明出处。本文链接:http://blog.csdn.net/perfect2011/article/details/7568375一 简介Floyd算法是一种用于寻找图中每一对定点之间最短路径的算法。二 重点转载 2016-06-20 21:56:44 · 232 阅读 · 0 评论 -
[置顶] 并查集详解 (转)
这个文章是几年前水acm的时候转的, 当时也不知道作者是谁, 要是有人知道的话说一下吧并查集是我暑假从高手那里学到的一招,觉得真是太精妙的设计了。以前我无法解决的一类问题竟然可以用如此简单高效的方法搞定。不分享出来真是对不起party了。(party:我靠,关我嘛事啊?我跟你很熟么?)来看一个实例,杭电1232畅通工程首先在地图上给你若干个城镇,这些城镇都可转载 2016-07-18 10:03:23 · 238 阅读 · 0 评论 -
【经典算法】——KMP,深入讲解next数组的求解
【经典算法】——KMP,深入讲解next数组的求解前言 之前对kmp算法虽然了解它的原理,即求出P0···Pi的最大相同前后缀长度k;但是问题在于如何求出这个最大前后缀长度呢?我觉得网上很多帖子都说的不是很清楚,总感觉没有把那层纸戳破,后来翻看算法导论,32章 字符串匹配虽然讲到了对前后缀计算的正确性,但是大量的推理证明不大好理解,没有与程序结合起来讲。今天我在这转载 2016-05-17 15:30:42 · 190 阅读 · 0 评论 -
跳表
为什么选择跳表目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。 想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树出来吗? 很难吧,这需要时间,要考虑很多细节,要参考一堆算法与数据结构之类的树,还要参考网上的代码,相当麻烦。 用跳表吧,跳表是一种随机化的数据结构,目前转载 2016-05-04 16:33:08 · 216 阅读 · 0 评论 -
教你透彻了解红黑树
教你透彻了解红黑树 作者 July 2010年12月29日------------------本文参考:Google、算法导论、STL源码剖析、计算机程序设计艺术。本人声明:个人原创,转载请注明出处。更多请参考:http://blog.csdn.net/v_JULY_v/archive/2010/12/29/6105630.aspx详情,参见My BLog转载 2016-04-08 17:24:50 · 244 阅读 · 0 评论 -
数据结构(三)——双链表、链式栈、链式队列 及实现
一、双链表在单链表的基础上再增加一个指向它前驱的指针,就构成了双链表。所以双链表有三个变量:数据信息info、前驱指针llink、后继指针rlink。 二、双链表操作和实现 由于双链表也为单链表的一种变型,一些相似的操作就没一一列举,可以参考数据结构(四)——单链表 、带头结点的单链表、循环链表 及其实现 1、转载 2016-03-29 17:11:58 · 743 阅读 · 0 评论 -
哈夫曼树
一、哈夫曼树的概念和定义 什么是哈夫曼树?让我们先举一个例子。判定树: 在很多问题的处理过程中,需要进行大量的条件判断,这些判断结构的设计直接影响着程序的执行效率。例如,编制一个程序,将百分制转换成五个等级输出。大家可能认为这个程序很简单,并且很快就可以用下列形式编写出来: [cpp] view plain转载 2016-03-30 10:30:14 · 493 阅读 · 0 评论 -
数据结构(一)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
出处:(blog.csdn.net/fansongy一、基本概念每个结点最多有两棵子树,左子树和右子树,次序不可以颠倒。性质:1、非空二叉树的第n层上至多有2^(n-1)个元素。2、深度为h的二叉树至多有2^h-1个结点。满二叉树:所有终端都在同一层次,且非终端结点的度数为2。在满二叉树中若其深度为h,则其所包含的转载 2016-03-29 17:07:04 · 571 阅读 · 0 评论 -
数据结构(四)--B树、B-树、B+树、B*树
B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如: B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,转载 2016-03-30 09:53:15 · 263 阅读 · 0 评论 -
数据结构(五)--最小生成树(普利姆算法、克鲁斯卡尔算法)
给定一个带权的无向连通图,如何选取一棵生成树,使树上所有边上权的总和为最小,这叫最小生成树.求最小生成树的算法(1) 克鲁斯卡尔算法图的存贮结构采用边集数组,且权值相等的边在数组中排列次序可以是任意的.该方法对于边相对比较多的不是很实用,浪费时间.(2) 普里姆算法图的存贮结构采用邻接矩阵.此方法是按各个顶点连通的步骤进行,需要用一个顶点集合,开始为空集,以后将以连通的顶点转载 2016-03-30 10:07:23 · 1476 阅读 · 0 评论 -
数的存储结构
数的存储结构:1.双亲表示法: 以一组连续的空间存储数的节点,同时在每个元素中,附带一个用于指示其双亲节点在数组中的下标的指示器。1234typedefstruct TreeNode{ intdata; //假设数据域是整型 int转载 2016-04-05 11:06:58 · 501 阅读 · 0 评论 -
简单选择排序 Selection Sort 和树形选择排序 Tree Selection Sort
选择排序 Selection Sort 选择排序的基本思想是:每一趟在剩余未排序的若干记录中选取关键字最小的(也可以是最大的,本文中均考虑排升序)记录作为有序序列中下一个记录。 如第i趟选择排序就是在n-i+1个记录中选取关键字最小的记录作为有序序列中第i个记录。 这样,整个序列共需要n-1趟排序。 简单选择排序 一趟简单选择排序的操作为:通转载 2016-04-05 14:23:37 · 358 阅读 · 0 评论 -
《算法导论》读书笔记之第12章 二叉查找树
摘要: 本章介绍了二叉查找树的概念及操作。主要内容包括二叉查找树的性质,如何在二叉查找树中查找最大值、最小值和给定的值,如何找出某一个元素的前驱和后继,如何在二叉查找树中进行插入和删除操作。在二叉查找树上执行这些基本操作的时间与树的高度成正比,一棵随机构造的二叉查找树的期望高度为O(lgn),从而基本动态集合的操作平均时间为θ(lgn)。1、二叉查找树 二叉查找树是按照转载 2016-04-07 15:59:46 · 300 阅读 · 0 评论 -
堆排序 Heap Sort
堆排序 Heap Sort 堆排序是一种选择排序,其时间复杂度为O(nlogn)。堆的定义 n个元素的序列{k1,k2,…,kn}当且仅当满足下列关系之一时,称之为堆。 情形1:ki 2i 且ki 2i+1 (最小化堆或小顶堆) 情形2:ki >= k2i 且ki >= k2i+1 (最大化堆或大顶堆) 其中i=1,2,…,n/2向下取整;转载 2016-04-07 20:52:54 · 330 阅读 · 0 评论 -
平衡二叉树构建过程中的旋转
若向平衡二叉树中插入一个新结点后破坏了平衡二叉树的平衡性。首先要找出插入新结点后失去平衡的最小子树根结点的指针。然后再调整这个子树中有关结点之间的链接关系,使之成为新的平衡子树。当失去平衡的最小子树被调整为平衡子树后,原有其他所有不平衡子树无需调整,整个二叉排序树就又成为一棵平衡二叉树。失去平衡的最小子树是指以离插入结点最近,且平衡因子绝对值大于 1 的结点作为根的子树。假设用 A 表示失转载 2016-04-08 17:18:15 · 7068 阅读 · 0 评论 -
Catalan(卡特兰)数及定理的简要证明------附上简要代码
Catalan数很重要, 学计算机的, 没有不知道这个的, 我这个非计算机专业的学生, 也来凑凑热闹: catalan数和上述定理的应用非常普遍, 也是很多IT公司笔试面试的常考点之一, 其变换方式层出不穷, 有兴趣的朋友可以百度或者谷歌一下。 根据上述catalan数的通项转载 2016-07-08 15:32:43 · 966 阅读 · 0 评论