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

1
学习算法与数据结构相关的笔记
摘要:基数排序又称为桶排序,是一种非比较型整数排序算法。基数排序与本系列前面讲解的七种排序方法都不同,它不需要比较关键字的大小。它是根据关键字中各位的值,通过对排序的N个元素进行若干趟“分配”与“收集”来实现排序的。当然,这个算法思想比较好理解。但是要实现一个桶结构还是比较麻烦,因此有人通过巧妙的设计来简... 阅读全文
posted @ 2015-08-13 10:42 XiaoManon 阅读(322) 评论(0) 推荐(0)
摘要:归并排序采用了分治法的思想,下面给出了非递归实现和递归实现的方法 ,以方便以后使用。 1 #include 2 #include 3 4 // begin: 左边子序列的起始下标 5 // mid : 右边子序列的起始下标 6 // end : 右边子序列的结束元素的下一个位置(子序列不包... 阅读全文
posted @ 2015-08-13 09:14 XiaoManon 阅读(259) 评论(0) 推荐(0)
摘要:堆排序是比较难以理解的算法,构造不同的堆(大顶堆/小顶堆)可以得到不同的排列顺序。如果我们需要将数组进行从小到大的顺序排列,就需要构造大顶堆。为了方便个人复习,在这里给出我自己调试通过的一段代码: 1 #include 2 typedef int Item; 3 // 构造大顶堆 4 void h... 阅读全文
posted @ 2015-08-12 10:34 XiaoManon 阅读(209) 评论(0) 推荐(0)
摘要:对有序数组{2、11、15、19、30、32、61、72、88、90、96}进行二分查找,则成功找到15需比较()次:A3B4C2D5 1 #include 2 #include 3 4 int binary_search(int* a, int len, int goal) 5 { 6 ... 阅读全文
posted @ 2015-07-22 09:56 XiaoManon 阅读(419) 评论(0) 推荐(0)
摘要:首先定义顺序栈的存储结构 1 /* 栈的顺序存储结构 2 **/ 3 #define STACK_INIT_SIZE 100 //存储空间的初始分配量 4 #define STACK_INCREMENT 10 //存储空间的分配增量 5 typedef int SElemType; 6 typed... 阅读全文
posted @ 2015-05-25 20:34 XiaoManon 阅读(268) 评论(0) 推荐(0)
摘要:首先,我们定义带头节点的单链表存储结构如下:1 /*2 ** 线性表的单链表存储结构定义 */3 typedef int ListElemType;//线性表数据元素类型4 typedef struct tagLNode {5 ListElemType data;6 struct t... 阅读全文
posted @ 2015-05-17 16:40 XiaoManon 阅读(945) 评论(0) 推荐(0)
摘要:首先定义二叉树的存储结构1 /* 二叉树的二叉链表结点结构定义 */2 typedef char TreeElemType;3 typedef struct tagBiTreeNode {4 TreeElemType data;//结点数据5 struct tagBiTreeNode... 阅读全文
posted @ 2015-05-13 16:38 XiaoManon 阅读(198) 评论(0) 推荐(0)
摘要:线性表的顺序存储结构:1 /*2 ** 线性表的顺序存储结构 */3 #define SQLIST_INIT_SIZE 100 //顺序表存储空间初始分配量4 #define SQLIST_INCREMENT 10 //存储空间分配增量5 typedef struct tagSqList {6 ... 阅读全文
posted @ 2015-05-11 10:24 XiaoManon 阅读(247) 评论(0) 推荐(0)
摘要:朴素模式匹配算法的存在大量的重复匹配操作,时间复杂度为O(m*n),其中m表示主串的长度,n表示模式串的长度,但是算法好理解。另外有一种高效的算法,被称为KMP,该算法的目标就是去掉多余的重复匹配过程,但是算法很难理解,主要是通过构造一个next[]数组来实现,可以实现线性的时间复杂度O(m+n),... 阅读全文
posted @ 2015-05-07 10:25 XiaoManon 阅读(807) 评论(0) 推荐(0)
摘要:有关回文串的问题,可能涉及到判断一个字符串是否是回文串、求最大回文子串长度或者求至少添加多少个字符使得输入字符串称为回文串。这些问题我都已经解决,为了使用方便,我把这些实现代码都粘出来了。 1 #include 2 #include 3 #include 4 5 /** 6 ... 阅读全文
posted @ 2015-05-01 15:52 XiaoManon 阅读(369) 评论(0) 推荐(0)
摘要:描述:森林里的笨笨熊今天可开心啦——他买了新房子,乔迁新喜要搬家了。因此,笨笨熊请了许多好朋友来帮忙搬家,并准备了很多小纸盒用来装需要搬的物品,不过,这些纸盒的容积都是相同的,并且最多只能装两个物品。但是,为了不打扰太多的朋友,笨笨熊想了个“聪明”办法:让每个纸盒使用效率最高(注:只要纸盒容积大于物... 阅读全文
posted @ 2015-04-30 10:04 XiaoManon 阅读(461) 评论(0) 推荐(0)
摘要:描述:来自星星的都教授除了所有感官比地球人高出七倍,始终容颜不老以外,还拥有一项在地球人看来特别神奇的能力,他会瞬间(0.00000000001s以内)按照他的规则比较地球人熟悉的两个十进制数字的大小,他比较的规则如下:1、将要比较的两个数字分别转换成二进制数字;2、计算两个二进制数字中1的个数,个... 阅读全文
posted @ 2015-04-30 09:51 XiaoManon 阅读(280) 评论(0) 推荐(0)
摘要:原书中读取字符串使用了gets(),使用此函数读取字符串很危险,因此改用了fgets()替代,修改后代码如下: 1 #include 2 #include 3 4 int main(void) 5 { 6 char str[100], stack[100]; 7 int i,... 阅读全文
posted @ 2015-04-29 16:52 XiaoManon 阅读(351) 评论(0) 推荐(0)
摘要:书中给出的算法有点浪费空间,可以使用循环队列进行改进,这样就不需要使用额外的空间,在原数组的基础上就可以完成解密,代码如下: 1 #include 2 3 void decode(int a[], int size) 4 { 5 int head = 0, tail = size;//t... 阅读全文
posted @ 2015-04-29 15:33 XiaoManon 阅读(815) 评论(0) 推荐(0)
摘要:快速排序算法的平均时间复杂度为O(nlogn),实现代码如下:#include #include int division(int a[], int left, int right){ int i = left, j = right, base = a[left], t; while (... 阅读全文
posted @ 2015-04-29 14:51 XiaoManon 阅读(187) 评论(0) 推荐(0)
摘要:最近看了两篇不错的博文,是介绍基本的查找和排序算法的,自己也在不断整理,先把代码放网上,参考资料如下:Victor ZhangSHIroh的专栏以上资料中,一个没有代码,另一个使用的JAVA实现,我在这里使用C语言将它们实现了。0 头文件声明1 #include 2 #include 3 typed... 阅读全文
posted @ 2015-03-30 20:22 XiaoManon 阅读(1069) 评论(0) 推荐(0)
摘要:我们可以很容易的使用队列来实现二叉树的层序遍历,代码如下: 1 #include 2 #include 3 #define MAX 10 4 5 6 //二叉树存储结构定义 7 typedef char Item; 8 typedef struct node *link; 9 struct... 阅读全文
posted @ 2015-02-01 21:40 XiaoManon 阅读(576) 评论(0) 推荐(0)
摘要:二叉树的非递归实现需要使用到下推栈,下面给出前序遍历的完整代码: 1 #include 2 #include 3 #define MAX 10 4 5 6 //二叉树存储结构定义 7 typedef char Item; 8 typedef struct node *link; 9 str... 阅读全文
posted @ 2015-02-01 15:54 XiaoManon 阅读(195) 评论(0) 推荐(0)
摘要:在上一篇“连通性问题”中已经对这个问题进行来介绍,在这一篇中给出针对以上问题的改进,在代码中已经对原理进行来注释。加权快速合并算法 1 /** 2 * @file weightedquickunion.c 3 * @brief 加权快速合并算法 4 * 在合并操作中,不是任... 阅读全文
posted @ 2015-01-15 21:18 XiaoManon 阅读(271) 评论(0) 推荐(0)
摘要:参考:Robert Sedgewick,《算法:C语言实现》第1章问题描述 假设给定整数对的一个序列,其中每个整数表示某类型的一个对象,我们想要说明整数对p-q表示“p连接到q”。假设“连通”关系是可传递的:也就是说如果p和q之间连通,q和r之间连通,那么p和r也是连通的。我们的目标是写一个过滤集... 阅读全文
posted @ 2015-01-14 20:52 XiaoManon 阅读(608) 评论(0) 推荐(0)

1