数据结构
文章平均质量分 68
qingtianweichong
这个作者很懒,什么都没留下…
展开
-
ACM 学习之 并查集
hdu 1558 http://acm.hdu.edu.cn/showproblem.php?pid=1558 很久没有a题 一些小细节都忘了输出错了了几次,并查集的最基本方式都差点忘了,今天小复习一下。比较简单的并查集,先判断两个线段相交,再用并查集看是否合并,只要注意集合大小的合并即可解决,下面是code: #include原创 2012-10-18 10:57:21 · 532 阅读 · 0 评论 -
算法之查找第k小的数和查找最小的k个元素
利用快速排序的思想查找第k小的数,其中用到了随机数,但是主要的核心思想还是快速排序,具体的细节可以查看《算法导论》第九章,下面只是照书上实现的代码: /*查找数据组中,第k小的数*/#include #include const int MAX = 1000;void exchange(int &a,int &b){ int temp=a; a=b;原创 2013-05-22 14:01:46 · 4227 阅读 · 0 评论 -
最长回文子串
最长回文子串也是笔试和面试环节经常出现的一个题目,基本的思想很简单,就是从头开始,以每个点为中点位置,然后向两边搜索最长的相等的串,有一个需要注意的地方就是串的长度为偶数或者奇数时的不同情况,比如abba和aba这样的不同的子串,需要同时考虑到这两种情况,做了一个简单的实现,简单测试过,code如下:#include #include #include using namespace原创 2013-10-06 09:13:30 · 653 阅读 · 0 评论 -
查找之杨氏矩阵
这个也是笔试或者面试过程中经常遇到的一个问题,利用二分查找的思想,巧妙的查找目标元素,网上资料也比较多,自己只是做一个收藏,贴一个code/*杨氏矩阵查找*/#include using namespace std;//二维数组的使用是一个问题void fun(int array[][100],int n,int m,int key, int &i,int原创 2013-10-05 19:32:49 · 713 阅读 · 0 评论 -
链表相交问题
这个是目前发现的比较齐全的链表相交问题的解答,和代码,有些地方做简单的补充和修改。代码没有任何改动,重要的是问题的解决方法1、如何判断一个单链表有环2、如何判断一个环的入口点在哪里3、如何知道环的长度4、如何知道两个单链表(无环)是否相交5、如果两个单链表(无环)相交,如何知道它们相交的第一个节点是什么?6、如何知道两个单链表(有环)是否相交转载 2013-10-06 15:07:15 · 631 阅读 · 0 评论 -
哈夫曼树求权值
哈夫曼树的权值求法,根据需要我们要构造哈夫曼树,然后根据树求节点,这个肯定是很麻烦的,可以根据哈夫曼树的构造过程可以看出来每次都是取最小的两个树节点然后合并成一棵树,而权值有两种算法,第一个可以取所有的叶子节点,用叶子节点与路径的乘积的和,第二种就是可以取所有的非叶子节点的总和。使用优先队列的就是使用的第二种办法,选一个标记是否为叶子节点,不是叶子节点的权值相加即可,有几个需要注意的地方:第一个就原创 2013-09-11 20:35:54 · 12370 阅读 · 0 评论 -
拓扑排序
拓扑排序属于有向无环图的应用,在实际工作中,长长把用一个有向图来表示工程的施工流程图,或者产品生产的流程图。一个工程一般可以分为若干个子工程,通常把子工程称为“活动”。有些应用关心工程是否能够顺利完成,即是否存在一个从工程开始到工程完成的活动序列,该序列满足所有活动之间的制约关系(一些活动的开始必须以另一个活动的结束为条件);而有些关系的是,工程的完成时间的估算,哪些活动是影响工程进度的关键。对于原创 2013-09-10 22:20:12 · 1419 阅读 · 0 评论 -
c++学习之优先队列(priority_queue)
优先队列的思想是比较简单的,就是在队列的基础上按照某一特定元素进出队列,计算机中作业的优先调度,就是按照作业的权值优先,先出队列。在STL容器中,优先队列的实现是使用的heap,也就是堆,用一个二叉堆维护一个优先队列,具体的堆的使用方法不做介绍,主要是了解priority_queue的基本使用方法及一点需要注意的地方。基本使用方法和其他的容器一样,需要将模版具象化,也就是指明类型,然后通过接口调用原创 2013-08-17 11:58:39 · 1487 阅读 · 0 评论 -
数据结构查找算法之二叉查找树
关于二叉查找树,介绍肯定是很多的,这里我列举的下面的代码和思想,是按照二叉查找树,但是没有使用二叉树的数据结构,而是按照数组索引建立逻辑上的二叉树结构,并使用二叉树的递归方式查找给定的值,并在注释中对不同的情况提出一点自己的看法,创建树的过程参考堆排序的思想,并且在结构上大致相同,所以需要注意的地方也基本上相同,前面介绍了推排序需要注意的地方,这里有几个地方需要说明的是,里面有一段二分查找的函数代原创 2013-08-13 11:08:20 · 684 阅读 · 0 评论 -
数据结构排序之堆排序
现在写推排序一个是因为上次整理掉了,二是因为觉得推排序中有几个需要注意的地方网上的资料都没有比较好的介绍,所以自己 整理了下,基本原理就是维护一棵二叉树,也就是二叉堆,先附上代码,然后做解释:#include using namespace std;#define left(i) (i) << 1#define right(i) ((i) << 1)+1#define pare原创 2013-08-12 16:18:19 · 837 阅读 · 0 评论 -
template学习之利用标准函数库写栈
#include #include #include #include /* 利用已经完成的Vertor标准库生成自定义的栈结构 而且还用到模版,笔试过程中绝对是一个亮点*/template class Stack{private: std::vector elem;public: void push(T const &); void pop(); T top(原创 2013-07-11 18:14:03 · 703 阅读 · 0 评论 -
数据结构之线性表1
前两天有同学去了腾讯的宣讲会,回来是一番感概,想来也到了我们找工作的时候,总觉的心里很多的不踏实,但也没有任何的办法,总是需要面对。毕业找工作是个不能免去的过程,至于能不能找到一个好的工作,很大部分看自己的努力,但总有些时候运气也很重要,虽然没有他们那么多的想法,但是心中也难免有些波澜,想着留着学校的时间也不是很多了,找工作之前也把自己学的东西重新收拾一下,自然学软件工程数据结构肯定是第一个,一本原创 2013-05-11 14:31:09 · 645 阅读 · 0 评论 -
数据结构之排序
/* 查找和排序两个最基本的算法,也是各种算法的基础和入门 本篇就先介绍排序,然后介绍查找。主要还是以代码和注释 形式解释,这里介绍的是一种排序的思想,每种排序的思想 有最基本的实现和其优化的一些算法,这里给出每种排序排 序思想的基本实现,并附上优化的一些想法,但是不提供代 码,主要是:1 插入排序,2 交换排序,包括冒泡排序和快 速排序,3原创 2013-05-11 14:04:19 · 573 阅读 · 0 评论 -
数据结构之栈和队列
数据结构中当然少不了栈和队列,不过在深入理解了链表的各种操作之后栈或者队列就比较简答了,我的理解是栈和队列只是逻辑上的数据结构,概念比较简单,但是应用确很多,而栈和队列都对数据有频繁的添加和删除操作,所以一般比较少用动态分配内存的方式(动态分配内存需要额外的开销),所以一般直接采用数组和指针的形式(不一定是指针,只要能进行逻辑上的操作即可,后面默认为指针),栈比较简单,只需要设置一个top指针即可原创 2013-05-07 20:49:29 · 669 阅读 · 0 评论 -
二叉树的创建与遍历
二叉树的创建与遍历是比较基本的问题,也是比较难的问题,在c语言中需要对指针和链表的操作比较熟悉,还要对递归有比较好的理解,下面用代码展示,在代码中有比较详细的注释。下面就贴出代码: /* 关于非线性的数据结构当然树形结构最重要,而树里面又属二叉树最重要, 所以在后面将列出二叉树的各种使用方法,包括基本的遍历,和我在一些 资料上看到的关于二叉树的面试题型。至于一些很原创 2013-05-03 19:52:50 · 7308 阅读 · 0 评论 -
字符串匹配及kmp改进算法
字符串最重要的也是最难的就是模式匹配,其他的也是比较简单的东西就不写了而且在最基本上的模式匹配的基础上提出了很多具有改进的算法,各种改进的算法的思想和出发点会在注释中解释 #include #include #include //int返回第一个匹配起点,a为模式串,b为目标串//先用一般的算法int match(char *a,char *b){原创 2013-04-25 15:44:56 · 917 阅读 · 0 评论 -
二维数组的最长递减子序列
[原]二维数组中的最长递减子序列2013-8-18阅读160 评论0给定一个如下的二维数组a[][]1 3 5 7 42 1 8 6 54 0 -1 -2 6求其中的最长递减子序列:7, 5, 3, 1, 0, -1, -2,长度为7。子序列只能朝向上下左右四个方向,不能朝对角线方向。思路:原创 2013-10-12 00:26:20 · 1858 阅读 · 0 评论