随笔分类 -  算法和数据结构

摘要:要点 在顺序表的算法文章中,我们讨论了线性表的顺序存储结构——顺序表。 顺序表是用一组地址连续的存储单元来保存数据的,所以它具有随机存取的特点。即查找快速,但是做插入或删除动作是,需要移动大量元素,效率较低。 链表 链表是线性表的链式存储结构,它相比于顺序表,在插入和删除元素时,效率要高很多。 链表 阅读全文
posted @ 2015-04-14 08:02 静默虚空 阅读(11537) 评论(1) 推荐(17) 编辑
摘要:顺序表要点顺序表是在计算机内存中以数组的形式保存的线性表,是指使用一组地址连续的存储单元依次存储数据元素的线性结构。顺序表的存储结构可表示如下:#define MAXSIZE 10typedef int ElemType;typedef struct { // 顺序表的结构类型 ElemType d... 阅读全文
posted @ 2015-04-10 18:46 静默虚空 阅读(18996) 评论(2) 推荐(22) 编辑
摘要:贪心算法的一个小应用题 阅读全文
posted @ 2015-03-24 13:50 静默虚空 阅读(9451) 评论(0) 推荐(3) 编辑
摘要:递归算法解决汉诺塔问题 阅读全文
posted @ 2015-03-23 15:28 静默虚空 阅读(2200) 评论(0) 推荐(1) 编辑
摘要:要点 模式匹配是数据结构中字符串的一种基本运算,给定一个子串,要求在某个字符串中找出与该子串相同的所有子串,这就是模式匹配。 假设P是给定的子串,T是待查找的字符串,要求从T中找出与P相同的所有子串,这个问题成为模式匹配问题。P称为模式,T称为目标。如果T中存在一个或多个模式为P的子串,就给出该子串 阅读全文
posted @ 2015-03-19 19:14 静默虚空 阅读(15830) 评论(2) 推荐(16) 编辑
摘要:要点 要点 哈希表和哈希函数 在记录的存储位置和它的关键字之间是建立一个确定的对应关系(映射函数),使每个关键字和一个存储位置能唯一对应。这个映射函数称为哈希函数,根据这个原则建立的表称为哈希表(Hash Table),也叫散列表。 以上描述,如果通过数学形式来描述就是: 若查找关键字为 key,则 阅读全文
posted @ 2015-03-16 14:19 静默虚空 阅读(8512) 评论(6) 推荐(10) 编辑
摘要:程序员的内功——数据结构和算法系列 阅读全文
posted @ 2015-03-11 17:50 静默虚空 阅读(80301) 评论(15) 推荐(74) 编辑
摘要:查找的基本概念 什么是查找? 查找是根据给定的某个值,在表中确定一个关键字的值等于给定值的记录或数据元素。 查找算法的分类 若在查找的同时对表记录做修改操作(如插入和删除),则相应的表称之为动态查找表; 否则,称之为静态查找表。 此外,如果查找的全过程都在内存中进行,称之为内查找; 反之,如果查找过 阅读全文
posted @ 2015-03-10 18:29 静默虚空 阅读(9689) 评论(1) 推荐(11) 编辑
摘要:要点 基数排序与本系列前面讲解的七种排序方法都不同,它不需要比较关键字的大小。 它是根据关键字中各位的值,通过对排序的N个元素进行若干趟“分配”与“收集”来实现排序的。 不妨通过一个具体的实例来展示一下,基数排序是如何进行的。 设有一个初始序列为: R {50, 123, 543, 187, 49, 阅读全文
posted @ 2015-03-09 17:23 静默虚空 阅读(27629) 评论(10) 推荐(33) 编辑
摘要:要点 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 归并排序的基本思想 将待排序序列 阅读全文
posted @ 2015-03-09 16:06 静默虚空 阅读(85927) 评论(5) 推荐(144) 编辑
摘要:堆的概念 在介绍堆排序之前,首先需要说明一下,堆是个什么玩意儿。 堆是一棵顺序存储的完全二叉树。 其中每个结点的关键字都不大于其孩子结点的关键字,这样的堆称为小根堆。 其中每个结点的关键字都不小于其孩子结点的关键字,这样的堆称为大根堆。 举例来说,对于n个元素的序列{R0, R1, ... , Rn 阅读全文
posted @ 2015-03-09 16:01 静默虚空 阅读(111729) 评论(30) 推荐(169) 编辑
摘要:要点 简单选择排序是一种选择排序。 选择排序:每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止。 简单排序处理流程 (1)从待排序序列中,找到关键字最小的元素; (2)如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换; (3)从余下的 N - 阅读全文
posted @ 2015-03-06 14:05 静默虚空 阅读(85049) 评论(6) 推荐(53) 编辑
摘要:要点 希尔(Shell)排序又称为缩小增量排序,它是一种插入排序。它是直接插入排序算法的一种威力加强版。 该方法因DL.Shell于1959年提出而得名。 希尔排序的基本思想是: 把记录按步长 gap 分组,对每组记录采用直接插入排序方法进行排序。 随着步长逐渐减小,所分成的组包含的记录越来越多,当 阅读全文
posted @ 2015-03-05 17:16 静默虚空 阅读(48971) 评论(9) 推荐(99) 编辑
摘要:要点 直接插入排序是一种最简单的插入排序。 插入排序:每一趟将一个待排序的记录,按照其关键字的大小插入到有序队列的合适位置里,知道全部插入完成。 在讲解直接插入排序之前,先让我们脑补一下我们打牌的过程。 先拿一张5在手里, 再摸到一张4,比5小,插到5前面, 摸到一张6,嗯,比5大,插到5后面, 摸 阅读全文
posted @ 2015-03-05 10:27 静默虚空 阅读(31083) 评论(2) 推荐(36) 编辑
摘要:要点 快速排序是一种交换排序。 快速排序由C. A. R. Hoare在1962年提出。 它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分:分割点左边都是比它小的数,右边都是比它大的数。 然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列 阅读全文
posted @ 2015-03-04 17:12 静默虚空 阅读(19074) 评论(18) 推荐(45) 编辑
摘要:要点 冒泡排序是一种交换排序。 什么是交换排序呢? 交换排序:两两比较待排序的关键字,并交换不满足次序要求的那对数,直到整个表都满足次序要求为止。 算法思想 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列 阅读全文
posted @ 2015-03-03 17:37 静默虚空 阅读(72485) 评论(15) 推荐(69) 编辑
摘要:采用模板类实现的好处是,不用拘泥于特定的数据类型。就像活字印刷术,制定好模板,就可以批量印刷,比手抄要强多少倍!此处不具体介绍泛型编程,还是着重叙述链表的定义和相关操作。链表结构定义定义单链表的结构可以有4方式。如代码所示。本文采用的是第4种结构类型/************************... 阅读全文
posted @ 2014-07-06 22:47 静默虚空 阅读(28435) 评论(4) 推荐(12) 编辑
摘要:在一次面试中遇到一个有意思的小算法题:要求将阿拉伯数字转为汉字显示出来(包含单位)。 当时虽然实现出来,但是代码写的有点凌乱。所以回家后,重新整理了一下。 这个算法有几个小的注意点: 1、中文字符占两个字节,所以如果用C语言实现,需要用char数组的形式保存单个汉字。 2、如果数字中出现连续的零,需 阅读全文
posted @ 2014-07-03 12:16 静默虚空 阅读(11687) 评论(0) 推荐(5) 编辑
摘要://test.h //test.cpp 阅读全文
posted @ 2014-06-16 21:51 静默虚空 阅读(849) 评论(0) 推荐(0) 编辑
摘要:做算法题时实现的一份大数乘法运算代码。没来得及详细整理,读者可以参考一下。 代码可以在VS2005上直接运行。 阅读全文
posted @ 2014-06-16 15:51 静默虚空 阅读(858) 评论(0) 推荐(0) 编辑