/*--------------------CSS部分-------------------*/ /*--------------------JS部分-------------------*/

随笔分类 -  c++数据结构与算法

摘要:选择排序:每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止。选择排序正如定义所讲,在数组查询出最小值,然后放在此次循环开始位置(前一次循环已经获取比它更小的值放在前面)。简单选择排序就是单纯的从数组中一次一次循环获取到最小值,放到循环位置。而堆排序正如名字... 阅读全文
posted @ 2015-09-17 16:39 bldong 阅读(4738) 评论(0) 推荐(0) 编辑
摘要:插入排序:数组中获取数据,遍历数组中数据进行比较,找到合适位置,进行插入工作。直接插入和希尔排序关键区别在于:希尔排序是有分组,然后进行迭代,组间插入数据,是一种变形的插入排序算法。一、直接插入法1、算法思想上图是一张扑克牌,在摸牌阶段就是直接插入操作。(1) 数组中下标为1 的元素视为元素个数为 ... 阅读全文
posted @ 2015-09-17 14:09 bldong 阅读(1280) 评论(0) 推荐(0) 编辑
摘要:交换排序:两两比较待排序的关键字,并交换不满足次序要求的那对数,直到整个表都满足次序要求为止。冒泡和快速排序是交换排序算法,冒泡排序给人直观感觉是从前开始遍历,将小的元素,慢慢交换到数组前面。快速排序直观感觉是从数组两边开始,以某一值作为分组标准,从顶端和尾端开始慢慢交换。一、冒泡算法1、“加火”-... 阅读全文
posted @ 2015-09-15 16:46 bldong 阅读(947) 评论(0) 推荐(0) 编辑
摘要:排序的目标就是将一组数据(序列)重新排列,形成有序的序列 (递增或者递减)。Donald Kuncth的经典之作《计算机程序设计艺术》第三卷专门讨论排序和查找。从无序到有序,有效减少系统的熵值,增加程序的有序度。对于一个未知系统,有序是非常有用的先验知识。因此,排序算法是其他排序算法的基础,比如二分... 阅读全文
posted @ 2015-09-14 17:14 bldong 阅读(628) 评论(0) 推荐(0) 编辑
摘要:构造二叉排序树目的是为了提高查找、插入和删除的效率。其实在构建二叉排序树的时候已经暗藏着排序。因此二叉排序树具有以下几个特点: 如根节点有左子树,则左子树的所有结点都比根节点小。 如根节点有右子树,则右子树所有结点都比根节点大。 根节点的左、右子树也分别为二叉排序树。 二叉树的存储结构 typedef struct BiTree { int d... 阅读全文
posted @ 2015-09-10 15:56 bldong 阅读(1616) 评论(0) 推荐(0) 编辑
摘要:什么是顺序查找呢?顺序查找的原理很简单,就是遍历整个列表,逐个进行记录的关键字与给定值比较,若某个记录的关键字和给定值相等,则查找成功,找到所查的记录。如果直到最后一个记录,其关键字和给定值比较都不等时,则表中没有所查的记录,查找失败。一、顺序查找在前面讲解了顺序表的存储结构,针对顺序查找,即适用于... 阅读全文
posted @ 2015-09-08 16:04 bldong 阅读(4255) 评论(0) 推荐(0) 编辑
摘要:在上万条数据中,查找制定元素,这就是查找完成的功能。 查找表:由同一种类型元素构成的集合,由于“集合”中数据元素之间存在松散的关系,因此查找表是一种灵活应用的数据结构。 查找表的操作: 查询某个特定的数据元素是否在查找表中。 查询某个特定元素的各种属性。 在查找表中制定位置插入一条数据。 从查找表中删除特定的数据元素。 查找表中四个操作之间是紧密关联的,比如,... 阅读全文
posted @ 2015-09-08 13:49 bldong 阅读(547) 评论(0) 推荐(0) 编辑
摘要:上一章节讲解了拓扑排序问题,拓扑排序是解决一个工程能否顺序解决的问题,本质是一个广度层次遍历的过程,通过记录顶点入度问题,进行逐步输出的工作。在实际生活中,往往是求解工程完成需要最短时间问题。比如生活中生产一辆汽车,需要生产各种各样的零件,最终组装成车。例如生产轮子0.5天,发动机3天,底盘2天,其... 阅读全文
posted @ 2015-09-06 17:22 bldong 阅读(4579) 评论(0) 推荐(1) 编辑
摘要:在生活、工作中进行一项任务,必须有先后顺序,这就是流程图,在流程图中有if分支,也就是下一个活动的展开,可能上一次活动中所有分支执行完毕,这样就形成了拓扑结构。接入项目中比较简单,我们可以通过链表表示项目之间各个活动的关系,当项目流程比较复杂时,我们需要有向图来描述这种关系,而且是不能循环的有向图,... 阅读全文
posted @ 2015-09-02 13:47 bldong 阅读(910) 评论(0) 推荐(0) 编辑
摘要:最短路径和最小生成树在应用很是不同的,比如:一开始修建一条地铁,然后在地铁点上有多个点,需要修建一个路程最短的地铁线,将这些地铁点连接起来,这就是最小生成树(点与点之间距离是已知的)。小强需要从A点去B点旅游,中间会经过好几个点,需要找出条最短路径到达B点。从应用上明显看出,两者的目的不同、初始化条件也是不同的。 一、Dijkstra(迪杰斯特拉)算法 Dijkstra(迪杰斯特拉)算法是典型... 阅读全文
posted @ 2015-08-28 17:16 bldong 阅读(1479) 评论(0) 推荐(0) 编辑
摘要:上一篇了解图的基本概念,包括图的分类、术语以及存储结构。本篇就是应用图的存储结构,将图进行数据抽象化,应用遍历方法,对数据进行遍历。由于图复杂的数据结构,一定保证图中所有顶点被遍历。如果只访问图的顶点而不关注边的信息,那么图的遍历十分简单,使用一个foreach语句遍历存放顶点信息的数组即可。但是,如果为了实现特定算法,就必须要根据边的信息按照一定的顺序进行遍历。图的遍历算法是求解图的连通性问题、... 阅读全文
posted @ 2015-08-26 16:09 bldong 阅读(2824) 评论(0) 推荐(0) 编辑
摘要:线性表和树两类数据结构,线性表中的元素是“一对一”的关系,树中的元素是“一对多”的关系,本章所述的图结构中的元素则是“多对多”的关系。图(Graph)是一种复杂的非线性结构,在图结构中,每个元素都可以有零个或多个前驱,也可以有零个或多个后继,也就是说,元素之间的关系是任意的。一、图的定义与术语定义:... 阅读全文
posted @ 2015-08-26 14:18 bldong 阅读(33300) 评论(0) 推荐(5) 编辑
摘要:哈夫曼树又称为最优二叉树,哈夫曼树的一个最主要的应用就是哈夫曼编码,本文通过简单的问题举例阐释哈夫曼编码的由来,并用哈夫曼树的方法构造哈夫曼编码,最终解决问题来更好的认识哈夫曼树的应用--哈夫曼编码。一、引子在学习中我们经常遇到将各科成绩改为优秀、良好、中等、及格和不及格。那么根据分级原理,代码表示... 阅读全文
posted @ 2015-08-19 15:04 bldong 阅读(1901) 评论(0) 推荐(1) 编辑
摘要:树都可用二叉链表作为存储结构,对比各自的结点结构可以看出,以二叉链表作为媒介可以导出树和二叉树之间的一个对应关系。 ◆ 从物理结构来看,树和二叉树的二叉链表是相同的,只是对指针的逻辑解释不同而已。 ◆ 从树的二叉链表表示的定义可知,任何一棵和树对应的二叉树,其右子树一定为空。 1 树转换成二叉树 对于一般的树,可以方便地转换成一棵唯一的二叉树与之对应。将树转换成二叉树在“孩子兄弟表示... 阅读全文
posted @ 2015-08-18 19:44 bldong 阅读(5223) 评论(0) 推荐(1) 编辑
摘要:二叉树是树的特殊一种,具有如下特点:1、每个结点最多有两颗子树,结点的度最大为2。2、左子树和右子树是有顺序的,次序不能颠倒。3、即使某结点只有一个子树,也要区分左右子树。 一、特殊的二叉树及特点 1、斜树 所有的结点都只有左子树(左斜树),或者只有右子树(右斜树)。这就是斜树,应用较少 2、满二叉树 所有的分支结点都存在左子树和右子树,并且所有的叶子结点都在同一层上,这样就是... 阅读全文
posted @ 2015-08-18 19:11 bldong 阅读(114349) 评论(7) 推荐(28) 编辑
摘要:树是一种数据结构,其中一个元素可以有两个或者多个数据元素,具有一对多的特点,用树结构来存储文件。 树的概念 结点的度:子结点的个数。例如结点1中有3个子结点,结点1的度是3. 树的度:树的度等于所有结点度中度最高的值。结点最高的度为3,树的度为3. 叶子结点:度为0的结点,即没有子结点的结点。例如:上图中3,5,6,7,9,10。 分支结点:除了叶子结点以外的... 阅读全文
posted @ 2015-08-18 15:38 bldong 阅读(1864) 评论(0) 推荐(2) 编辑
摘要:上文讲解了KMP算法,这种算法在字符串匹配中应用比较少,在各种文本编辑器中的查找功能大多采用Boyer-Moore算法。1977年,德克萨斯大学的Robert S. Boyer教授和J Strother Moore教授发明了这种算法。算法讲解开始:假定字符串为"HERE IS A SIMPLE EX... 阅读全文
posted @ 2015-08-18 14:24 bldong 阅读(731) 评论(0) 推荐(0) 编辑
摘要:模式匹配是数据结构中字符串的一种基本运算,给定一个子串,要求在某个字符串中找出与该子串相同的所有子串,这就是模式匹配。假设P是给定的子串,T是待查找的字符串,要求从T中找出与P相同的所有子串,这个问题成为模式匹配问题。P称为模式,T称为目标。如果T中存在一个或多个模式为P的子串,就给出该子串在T中的... 阅读全文
posted @ 2015-08-18 11:59 bldong 阅读(1260) 评论(0) 推荐(1) 编辑
摘要:前言顺序表是用一组地址连续的存储单元来保存数据的,所以它具有随机存取的特点。即查找快速,但是做插入或删除动作是,需要移动大量元素,效率较低。 链表是线性表的链式存储结构,它相比于顺序表,在插入和删除元素时,效率要高很多。 每个数据单元有两部分组成,一个是数据域,存储数据值;另一个是指针域,指向下一个... 阅读全文
posted @ 2015-08-05 15:37 bldong 阅读(813) 评论(0) 推荐(0) 编辑
摘要:1 前言算法时间复杂度,也就是算法的时间量度,就是在计算机上执行耗时。个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。在应用中用O表示。 一个算法是由控制结构和原操作构成的,其执行的时间取决于二者的综合效果。为了便于比较同一问题的不同算法,通常把算法中基本操... 阅读全文
posted @ 2015-08-04 19:02 bldong 阅读(788) 评论(0) 推荐(1) 编辑