
数据结构
文章平均质量分 76
lotluck
我会成为你的眼睛,为你看清未来
展开
-
数据结构排序之冒泡和选择
感觉现在在博客写冒泡排序和选择排序原创 2014-10-15 00:08:49 · 746 阅读 · 0 评论 -
栈和队列的练习
栈的练习#include #include typedef struct NODE{ int data; struct NODE *next; }node,*pnode;typedef struct STACK{ pnode ptop; pnode pbottom;}stack,*pstack;void initstack(stack原创 2015-07-21 16:01:15 · 745 阅读 · 0 评论 -
迪杰斯特拉
我擦个迪杰斯特拉,这都是大二上学期的事了,现在才敲这个算法,不过还好,反正要抓紧时间了,网上有很多的迪杰斯特拉代码,貌似有点不太适合我的口味,还是什么事要自己来。 #include#define MAX 0x3fffffff //这个变量只能读 #define MAX_SIZE 2005int path[MAX_SIZE] = {0};int原创 2015-07-23 09:41:25 · 923 阅读 · 0 评论 -
正确的二分查找
之前原来自己写的二分查找是错误的,估计大多数人写的二分查找也和我写的差不多吧,下面这链接是我之前写的错误的二分查找,现在来正确的,这个还是在july的树上看到的,感觉这个人特别厉害。 关键的一步还是mid = left + ((right-left)>>1);因为如果我们用两个很大合理的数相加,那么就会越界啊,这里巧妙的应用的位运算。 还有一点,尽量不要什么魔鬼数字,就是原创 2015-12-11 10:11:10 · 795 阅读 · 0 评论 -
大数相加,大数相乘和100!
自从腾讯HR面试被刷后,也就不想找实习了,记住教训吧,没事还有九月份,现在和其他人几个人都加进去了linux3+1实验室,暑假好好干一个暑假。 大数相加虽然之前写过,但是现在写代码起码也应该有自己的风格和规范了,其实大数相加和大数相乘的思路很简单,int我们现在一般用的都是4个字节,最大也是2147483647,简单说21亿,但是更大的数字就从不下了,因为我们可以用数组来模拟大数相乘和大原创 2016-05-26 00:57:04 · 549 阅读 · 0 评论 -
动态规划只11硬币的问题
刚接触动态规划的时候感觉很高端,但是做了以后啊还是那么大点事,也许什么事都那么回事,做了才知道,只有自己才清楚。其实在这个11硬币里面最主要的还是状态转移方程,只要这个方程找对了,实现起来也很容易,当进行到当前这一步,我总要和前一步进行比较,看这步是不是优化了,下面的外层循环遍历1,3,5,这个面值,然后里面在进行判断比较,这才是最关键的一步。很多问题类似,像背包问题。#includein原创 2015-03-16 17:03:50 · 1706 阅读 · 0 评论 -
动态规划之背包问题
这么长时间了,终于对背包差不多了解了,这个是01背包问题,里面的最主要的还是找出状态转移方程。动态规划是运筹学的一个分支,是求解决策过程最优化的数学方案。最优化原理,把多个阶段过程转化为一系列单阶段的问题,逐个求解。它里面包含两个重要的性质——最优子结构和重叠子问题 #includeint main(){ int i,j; in原创 2015-03-17 22:56:26 · 1726 阅读 · 0 评论 -
马踏棋盘递归所有解
这次马踏棋盘是用递归实现的,而且可以弄出来所有解,当时电脑跑的最快的都有40多万解了,这个也可以看你电脑cpu好坏,一般超级本跑不动。这是实际上和八皇后是同一种性质的问题,都用到了回溯的思想,有接进行下一个,不行了退回去,在进行尝试。不多说了,直接上代码; #include#include #include#define N 8int cnt=1; // 记录马的位置i原创 2015-01-26 16:26:15 · 3550 阅读 · 0 评论 -
全排列和汉诺塔
全排列问题这个是用递归实现的 #includeint cout=1;int n=0;void print(int *a){ int i=0; printf("%2d ",cout++); for(i=0;i<n;i++) printf("%d",a[i]); printf("\n");}void swap(int &x,int &y)原创 2015-03-17 23:29:50 · 1116 阅读 · 0 评论 -
八皇后的问题
八皇后的问题和马踏棋盘的思路是一样,都用到了回溯的思想。代码也都差不多。这个里面最精彩的地方用4个一位数组表示了这个棋盘。这个里面总共有92组解 代码展示 #include#includeint col[8]={0};int right[15]={0};int left[15]={0};int Queen[8];i原创 2015-01-26 16:28:03 · 836 阅读 · 0 评论 -
动态规划之最大k乘积,编辑距离,k好数,节点选择,背包问题
这几天真是闲的没事做了,都不知道干什么了,把自己之前的动态规划代码整理一遍,现在写代码也有了自己的风格。直接复制上去自己看吧,也懒得解释了1.最短编辑距离,里面用到了重定向读写#include #include #define MAXLEN 100#define min(a,b,c) (((a<b?a:b)<c)?(a<b?a:b):(c))int c[MAXLEN][M原创 2016-10-12 20:20:47 · 673 阅读 · 0 评论 -
称量硬币 和 2016腾讯的蛇形矩形
腾讯2016蛇形矩阵C语言版实现,认真分析一下也不难,找到规律 #include #include //全局变量int count = 1;void do_snack(int **matrix,int n);void write_num_to_snack(int **matrix,int n,int start);void print_snack(int **matr原创 2016-04-06 20:29:57 · 818 阅读 · 0 评论 -
子数组的最大和[算法]
题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。 这个题我的第一感觉就是3层for循环直接进行么,就喜欢暴力f原创 2015-04-21 21:36:05 · 1563 阅读 · 0 评论 -
数据结构堆排序
#include #include// 创建一个结构体 typedef struct node{ int data; struct node *left,*right;}BiTreeNode; int rear=0,front=0;//全局变量 //创建完全二叉树 BiTreeNode *CreateBiTree(int a[],BiTreeNode **Q,int n)原创 2015-03-12 23:43:42 · 1817 阅读 · 0 评论 -
DFS非递归实现图的遍历
代码还要自己敲呢,越敲越熟练,自己也就慢慢有感觉了,反正有时候的那感觉真的好难受啊,那种感觉就是高三后半期的感觉,颓废的不能再颓废了,糜烂的不能再糜烂,什么事情都不要敷衍了,什么事要做就做好,不做就不做,要做就从现在开始做,不要在一拖再拖了,,,,,,, 这个代码还在舍友的帮助下敲出来的,不会了就问吧,代码: #include原创 2014-12-14 11:03:30 · 2182 阅读 · 0 评论 -
哈夫曼树编码
终于会哈夫曼编码了,那就把代码发上去了,这周我们课设了,感觉自己好颓废,过了几天糜烂的生活,自己也不知道怎么回事,有些事也就是那个样子,不要因为其他人影响自己的情绪,对自己好点,说到还要做到,不仅嘴上说说而已。我昨天一个人去,就一个人去的,一个人的感觉也不错嘛,想做什么就做什么,自己的情绪也好多了,就像我说Low·魂淡想怎样就怎样痛怎样伤怎样,任何时候都不要让自己的心累。别笑我,幼稚的轻狂,原创 2014-12-13 16:56:45 · 1487 阅读 · 0 评论 -
将2个链表交替合并成一个链表
将带有头结点的2个原创 2014-10-25 12:17:22 · 4733 阅读 · 2 评论 -
面向自己的数据结构题库
1. 算法设计:在数组中找到原创 2014-10-25 13:40:13 · 828 阅读 · 0 评论 -
算式表达式(不转化逆波兰)
一 算式表达式 用字符串输入一段合法的表达式,比如1+2*(3+4)/5-6,然后通过一系列的操作,算出val=1二 分析 在上一篇博客中其实已经用到这思路——栈,这次只用了栈的思想,给数字创建一个数组,给运算符也创建一个数组,逐个读取字符,通过if,else if对每一个字符进行处理,用数字的大小来确定运算符的优先级,在最后字符读取完之后,如果栈没有空,重复上述的操作原创 2014-10-05 19:51:51 · 1430 阅读 · 0 评论 -
C语言集合的运算
一.集合运算目的 通过对集合交集,并集,差集运算来进一步熟悉和掌握链表的创建,删除,插入等一些基本的操作。二.集合运算内容定义两个集合A和B: 差集 :A与B的差集就是该元素属于A集合而不属于集合。并集:A与B相结合该元素既属于A又属于B。交集:A与B相同的一部分,既属于A又属于B。其实这个运算器有两种做法,一是重新malloc空间,将它们处理后的数都专门放到原创 2014-10-02 18:44:11 · 17562 阅读 · 1 评论 -
逆波兰表达式(后缀表达式)及其计算
一 逆波兰表达式描述 逆波兰表达式又叫做后缀表达式。就是将运算符置于运算对象的后面,比如a+b表示为ab+。二 逆波兰表达式转化及求值分析 初始化一个栈,再用两个字符数组,一个数组专门用来逐个读取字符,当遇到数字的时候存入另外一个字符数组,并以空格隔开,当读入运算符时,通过专门的调运函数优先级判断,进行出栈入栈的操作.当字符数组遍历完之后,判断栈是否为空,如果为空的话,原创 2014-09-28 16:55:06 · 2415 阅读 · 0 评论 -
数据结构排序之桶排序
写完了这个桶排序,赶紧睡觉了,明天还要上课,程序猿的原创 2014-10-24 01:49:33 · 1354 阅读 · 0 评论 -
约瑟夫环问题
一 . 约瑟夫环问题描述 约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后结果+1即为原问题的解二 . 约瑟夫环基本步骤 (1原创 2014-09-25 20:09:18 · 1820 阅读 · 0 评论 -
二分查找
1.二分查找的分析原创 2014-10-28 23:41:51 · 918 阅读 · 0 评论 -
二叉树的建立
对于二叉树的建立,自己犯了一个很严重的错误,于是就写了这篇关于二叉树中地址的博客,这是多么痛的领悟,还是先弄代码,好解释;#include#includetypedef struct node{ char data; struct node * Lchild; struct node * Rchild;}BiTree;原创 2014-11-15 19:21:58 · 2051 阅读 · 0 评论 -
将哈夫曼树转化成二叉树
今晚感觉好爽啊,好久好久没有这种感觉,起床需要点爆发力,做事还需要点动力,给自己都没有下过这么大的决心写代码,帮她却写的很好,我自己都吃惊了。哈哈哈。。。今晚也是帮她写好西邮导航睡不着,那就敲了一下哈夫曼树转化成二叉树的代码,其实理解了真的不难,我定义F为一个二级指针,用它指向结点的地址,创建很简单,输入数据data和权值weight,再把它的左右置为NULL; 初始原创 2014-12-18 01:13:48 · 3336 阅读 · 2 评论 -
装箱问题
一 问题分析 这次我听老范了讲了装箱的问题,题目:有n个物品,体积为v1,v2,v3. . .然后要求用最少的箱子把这些物品里面,这个是基于贪心算法的思想。贪心算法呢,就是每次找到的都是当前最优的,但是最后从总体情况看,它不一定是最优的;贪心算法规则一旦建立,就不能更改。一般情况下贪心算法求的解都是最优解。、 我们先对物品进行从大到小进行排序,每次拿出原创 2014-12-03 16:49:16 · 22505 阅读 · 6 评论 -
浅析SkipList跳跃表原理及代码实现
SkipList在leveldb以及lucence中都广为使用,是比较高效的数据结构。由于它的代码以及原理实现的简单性,更为人们所接受。我们首先看看SkipList的定义,为什么叫跳跃表?“ Skip lists are data structures that use probabilistic balancing rather than strictly enforced balancing. As a result, the algorithms for insertion转载 2015-07-12 12:35:23 · 758 阅读 · 0 评论