数据结构
文章平均质量分 79
数据结构
xiyouZmt
积极,沉稳,乐观,上进
展开
-
图的遍历 DFS(深度优先),BFS(广度优先)
#include #include #include using namespace std; //表结点 typedef struct ArcNode{ int adjvex;//该弧所指向的顶点的位置 ArcNode *nextarc;//指向下一条弧的指针 }ArcNode; //头结点 typedef struct转载 2016-01-08 16:51:47 · 425 阅读 · 0 评论 -
另类加法
如果让我们实现两个整数相加,但是不允许用加号及其它算数运算符,应该怎么实现呢,不能用算数运算,那其实还有一种运算方式就是位运算,关于算数运算大家可以看下位运算简单介绍,那么到底怎样用位运算实现呢,,,其实用两种运算符就可以了,"&" 和 "^"。数据在计算机中都是以二进制的形式来存储的,所以对于没有进位的运算,比如1+2,其实就是这样的 其实这就相当于异或,所以对于两个整数数a, b如果没有原创 2016-12-25 22:26:25 · 777 阅读 · 3 评论 -
插入排序
直接插入排序是利用顺序查找来判断带插入元素r[i]在r[1] ~ r[i - 1]有序序列中的位置,将r[i]与前面的记录的r[1] ~ r[i - 1]从后向前比较,将所有大于r[i]的元素后移一位,直到遇到一个小于或等于r[i]的元素,该元素位置就是r[i]插入的位置 。现在按照这个过程执行一遍 比如无序数组 33、12、25、33、68、19、80 初始状态 首先选择第二个元素原创 2016-11-03 00:53:40 · 481 阅读 · 0 评论 -
基数排序
基数排序基本思想:将原始序列的每个数封装成一个对象,其中包括value(值域)和next(指向此类的下一个对象),把每个元素按照其值域value的位数从低到高分别进行排序,每一位上的数放到对应下标的数组中,当有相同的数时,把该对象放到当前元素所在链表的最后位置上(尾插法),这样从个位开始,一直到最大元素的最高位。这样就把整个序列按照从小到大的顺序存放于数组中了。 具体实现:比如无序序列 46、2原创 2016-11-13 23:22:53 · 287 阅读 · 0 评论 -
最小生成树之Kruskal算法
对于城市交通问题,有一个要解决的问题是如何使n个城市之间在最节省经费的情况下建立交通路线,保证连通n个城市,在所有的线路中选择代价最小的。最小生成树就可以解决这一问题。 要构成最小生成树,必须满足一下两个条件 (1)尽可能选取权值最小的,但是不能构成回路。 (2)选取n-1条恰当的边连接往中的n个顶点。 Kruskal算法的基本思想:对于一个n个顶点的图,从权值最小的边开始,若它的添加不会原创 2015-12-13 17:42:14 · 408 阅读 · 0 评论 -
二路归并排序
二路归并的基本思想:将初始序列的n个元素看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到n/2个长度为2的有序子序列,然后再对这n/2个有序子序列进行两两归并,得到n/4个长度为4的有序子序列,直到得到一个长度为n的有序序列。 具体实现:现有无序序列46、25、68、33、33、19、12、80 初始状态: 第一次划分: 第二次划分: 第三次划分:原创 2016-11-11 12:03:55 · 859 阅读 · 0 评论 -
快速排序
快速排序的基本思想:从待排序列中任选一个记录并标记,称之为“枢轴”,然后遍历整个序列,小于枢轴的放到其前面,大于枢轴的放到其后面,这样一趟遍历完毕后,整个序列就成为两个子序列,前半部分都是小于记录的值,后半部分都大于记录的值,然后再递归的对每一个子序列进行快速排序,直到每个子序列只有一个元素,整个序列变得有序。 具体实现:对于无序数组r[n],用两个标记low和high分别表示数组的两端,hig原创 2016-11-10 00:01:10 · 780 阅读 · 0 评论 -
希尔排序
希尔排序(Shell Sort)又称为 "缩小增量排序",其基本思想是:先将整个待排序列根据增量分割成若干个子序列,分别进行插入排序,然后再缩小增量依次进行排序,最后再对全体进行一次插入排序,因为插入排序在序列基本有序的情况下效率是很高的,所以Shell Sort 比直接插入排序有很大提高 现在我们看一下Shell Sort的完整过程,比如无序序列46、25、68、33、33、19、12、80原创 2016-11-06 21:01:07 · 347 阅读 · 0 评论 -
栈的应用之算数表达式
对于一个算术表达式,我们可以用栈这种数据结构来计算他的值,也就是说可以将一个标准形式的表达式(或叫中缀表达式)转换成后缀表达式,并坚持普通的优先级法则,将一般问题浓缩成小规模问题,我们假设有运算符 + - * / ( )中缀表达式是合法的,比如 :a + b * c + ( d * e + f ) * g 转换成后缀表达式 a b c * + d e * f + g * + ,对表达式进行遍历,原创 2015-11-11 20:04:54 · 494 阅读 · 0 评论 -
huffman
哈夫曼树又称最优二叉树,是带权路径最短的树,可以用来构造最优编码,用于信息传递,数据压缩等方面,是一种应用广泛的二叉树。 哈夫曼算法的实现 (1)存储结构 哈夫曼树是一种二叉树,其有自己的存储特点,可以采用静态三叉链表来实现。对于每个节点,它的存储信息应包含自身的权值,双亲信息,以及左右孩子的信息。因此可以设计成如下所示的三叉链表结点结构。 weight------parent------原创 2015-12-06 19:37:31 · 755 阅读 · 0 评论 -
二进制中1的个数
前几天看了一道题目,输入一个数,统计这个数的二进制中的1的个数,第一眼看这个题感觉很容易,先把这个数转成二进制,然后再用String.valueof(),方法(如果用Java写的话)将其转成字符串,最后遍历一遍,统计出1的个数,但是,这种做法效率很低,不推荐使用,其实我们可以通过位运算来高效的完成这个问题 大概说下位运算,位运算一共分为五种,与、或、异或、左移、右移。 与(&) 1 & 1 =原创 2016-10-26 22:58:04 · 495 阅读 · 0 评论