数据结构
qiki_tang
不积硅步无以至千里,突破自己,糖没味儿加油!
展开
-
最小生成树---克鲁斯卡尔算法
【最小生成树-克鲁斯卡尔算法】本算法以无向图为例,图的存储方式采用邻接矩阵与普里姆算法有所区别的是,克鲁斯卡尔算法以图的边为研究点。1)将图以邻接矩阵的方式存储,由于这里的示例采用无向图,因此它是一个对称阵;2)将该邻接矩阵转换为按权值由低到高排序、并同时记录了边的起点和终点的“新矩阵”;3)遍历此“新矩阵”,由于遍历前矩阵已按权值从低到高排序,因此最小生成树一定集中分布在原创 2017-10-20 09:52:49 · 1681 阅读 · 1 评论 -
【线性表】-单链表-LinkList
/**************************线性表的链式存储结构功能代码包含:1)单链表的数据结构定义2)单链表的整表创建--初始化3)单链表的整表删除4)从单链表中获取元素5)从单链表中插入元素6)从单链表中删除元素注意:代码不进行debug,只实现基本功能Author:tmwdate:2018-3-9**************************...原创 2018-03-09 17:29:22 · 230 阅读 · 0 评论 -
【栈】-栈的顺序存储结构-SqStack
/**************************栈的顺序存储结构功能代码包含:1)栈的数据结构定义2)栈的创建--初始化5)往栈中插入元素6)删除栈顶元素注意:代码不进行debug,只实现基本功能Author:tmwdate:2018-3-9**************************/#include <stdio.h>#include &...原创 2018-03-09 17:31:40 · 859 阅读 · 0 评论 -
【栈】-链栈-LinkStack
/**************************栈的链式存储结构功能代码包含:1)链式栈的数据结构定义2)链栈的初始化3)往链式栈中插入元素(push)4)删除链式栈顶元素(pop)注意:代码不进行debug,只实现基本功能Author:tmwdate:2018-3-9**************************/#include <stdio.h&...原创 2018-03-09 17:33:54 · 536 阅读 · 0 评论 -
【队列】-循环队列的顺序存储结构-SqQueue
/**************************循环队列的顺序存储结构功能代码包含:1)循环队列的顺序存储结构的数据结构定义2)初始化循环队列3)往循环队列中插入元素--入队4)删除循环队列中的元素--出队5)求循环队列的实际长度注意:代码不进行debug,只实现基本功能Author:tmwdate:2018-3-9************************...原创 2018-03-09 17:36:00 · 1528 阅读 · 0 评论 -
【队列】-队列的链式存储方式-LinkQueue
/**************************队列的链式存储结构功能代码包含:1)队列的链式存储结构的数据结构定义2)初始化链式队列3)往链式队列中插入元素--入队4)删除链式队列中的元素--出队注意:代码不进行debug,只实现基本功能Author:tmwdate:2018-3-9**************************/#include <...原创 2018-03-09 17:37:54 · 439 阅读 · 0 评论 -
【串】-标准库中串的四种基本功能函数(strlen、strcat、strcpy、strcmp)
/**************************标准库中串的四种基本功能函数(strlen、strcat、strcpy、strcmp)strlen(s):返回S的长度,不包括字符串结束符NULL;strcmp(s1,s2):比较两个字符串是否相同,若s1==s2,返回0,若s1>s2则返回正数,若s1<s2则返回负数;strcat(s1,s2):将字符串s2连接到s1上...原创 2018-03-09 17:39:32 · 573 阅读 · 0 评论 -
线索二叉树
线索二叉树---中序遍历一、思想 step1:以二叉树的前序遍历方式输入数据,空位补NULL; step2:将建立好的二叉树进行中序线索化 step3:给已中序线索化的二叉树(此时变成了双向链表)加入头结点,方便遍历和查找 step4:找到中序遍历的第一个元素后,中序遍历整个二叉树二、关键 线索二叉树数据结构中的布尔型变量Thread和Link,, 1)当结点存...原创 2018-03-09 21:18:31 · 355 阅读 · 0 评论 -
Skip List(跳跃表)原理详解
为什么选择跳跃表目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树出来吗? 很难吧,这需要时间,要考虑很多细节,要参考一堆算法与数据结构之类的树,还要参考网上的代码,相当麻烦。用跳表吧,跳表是一种随机化的数据结构,目前开源软件 Redis 和 LevelDB 都有用到它,它的...转载 2018-07-14 11:49:42 · 1429 阅读 · 0 评论 -
【线性表】-顺序存储结构-SqList
/**************************线性表的顺序存储结构功能代码包含:1)顺序存储结构的数据结构定义2)从表中获取元素3)从表中插入元素4)从表中删除元素代码不进行debug,只实现基本功能Author:tmwdate:2018-3-9**************************/#include <stdio.h>#includ...原创 2018-03-09 17:26:19 · 912 阅读 · 0 评论 -
无向图-邻接矩阵-宽度优先遍历-BFS C代码实现
一、BFS算法思路本算法以无向图为例,存储方式采用邻接矩阵1)将该网以邻接矩阵的方式存储,由于这里的示例采用无向图,因此它是一个对称阵2)选取A点为起始点,访问此顶点,用一个visit的bool型数组记录访问状态(false表示未被访问,true表示已访问)3)从A的未被访问的邻接点出发,宽度优先遍历图,直到图中所有和v有路径相通的顶点都被访问到宽度优先遍历需要借助队列,思想与二叉树的层序遍历类似...原创 2018-02-21 16:37:42 · 5268 阅读 · 1 评论 -
无向图-邻接链表-宽度优先遍历-BFS C代码实现
一、算法思路本算法以无向图为例,存储方式采用邻接表1)将该网以邻接表的方式存储,由于这里的示例采用无向图,因此它是一个对称阵2)选取A点为起始点,访问此顶点,用一个visit的bool型数组记录访问状态(false表示未被访问,true表示已访问)3)从A的未被访问的邻接点出发,宽度优先遍历图,直到图中所有和v有路径相通的顶点都被访问到二、BFS测试用例 本算法的测试用例为《大话数据...原创 2018-02-21 16:32:24 · 677 阅读 · 0 评论 -
最小生成树---普里姆算法
【普里姆算法】本算法以无向图为例,图的存储方式采用邻接矩阵1)以第一个顶点开始本算法,将第一个顶点(i = 0)加入最小生成树集low_cost[i] = 0,0代表已经加入生成树集;2)遍历第i行邻接矩阵,更新与顶点i有边的顶点的权值(该权值集的初始化值为与第一个顶点有边连接的顶点的权值)3)遍历这个low_cost权值集合,找到最小权值并输出为了找到与当前顶点有边的前一个顶原创 2017-10-17 22:26:50 · 652 阅读 · 0 评论 -
平衡二叉树
平衡二叉树一、概念平衡二叉树:平衡二叉树也是一种二叉排序树,满足:每一个结点的左子树和右子树的高度差不大于1BF:平衡因子二叉树结点的左子树深度减去右子树深度的值。若为负,说明左子树深度低于右子树深度;若为正,说明左子树深度高于右子树深度。根据平衡二叉树定义可知,平衡二叉树的平衡因子取值只有三种情况:-1 0 1【归纳以上,可知】满足平衡二叉树的两个条件:1)必须是二叉原创 2017-10-28 20:22:35 · 683 阅读 · 0 评论 -
最短路径---迪杰斯特拉算法
【最短路径-迪杰斯特拉算法】本算法以无向网为例,存储方式采用邻接矩阵1)将该网以邻接矩阵的方式存储,由于这里的示例采用无向图,因此它是一个对称阵2)选取A点为起始点,求A点到其他各个顶点之间的最短路径3)算法开始跟prim算法类似,先用一个min_weight[]数组存储与顶点i有边相连的权值,并在每一次循环中找出与顶点i有边相连的权值最小边的顶点,并用数组final_mark原创 2017-10-21 17:15:32 · 353 阅读 · 0 评论 -
最短路径---弗洛伊德算法
【最短路径---弗洛伊德算法】 本算法以无向网为例,存储方式采用邻接矩阵 1)将该网以邻接矩阵的方式存储,由于这里的示例采用无向图,因此它是一个对称阵 2)弗洛伊德算法的优势在于,它在求任意顶点到其他顶点的最短路径的问题上,算法比迪杰斯特拉简明易懂(当然,迪杰斯特拉也可以求任意顶点到其他顶点的最短路径,只需在最外层循环再套一层for循环即可,算法复杂度与弗原创 2017-10-22 12:30:05 · 574 阅读 · 0 评论 -
【哈希表】散列表查找--避免冲突的两种解决方法程序实现
C语言哈希表--避免冲突的两种解决方法程序实现【一些概念】1、散列函数--哈希函数存储位置 = f(关键字)散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。查找时,可根据这个确定的对应关系找到给定值key的映射f(key),即,若查找集合中存在这个记录,则必定在f(key)的位置上。f就是散列函数(即哈希函数)2、散列表--哈希...原创 2017-10-31 10:08:45 · 7730 阅读 · 2 评论 -
【二叉排序树】--无序表查找、插入、删除
【二叉排序树】[概念]二叉排序树,它或者是一棵空树,或者是具有下列性质的二叉树1)当它的左子树不空,则左子树上所有结点的值均小于它根结构的值2)当它的右子树不空,则右子树上所有结点的值均大于它根结构的值3)二叉排序树的左、右子树也分别为排序树一、查找构造一棵二叉排序树的目的不是为了排序,而是为了方便插入和删除操作二叉排序树经过中序遍历后就是一个有序序列二、插入...原创 2017-10-24 20:55:35 · 715 阅读 · 2 评论 -
无向图-邻接链表的深度优先遍历-DFS
一、DFS思想本算法以无向网为例,存储方式采用邻接链表1)将该网以邻接链表的方式存储2)选取A点为起始点,访问此顶点,用一个visit的bool型数组记录访问状态(false表示未被访问,true表示已访问)3)从A的未被访问的邻接点出发,深度优先遍历图,直到图中所有和v有路径相通的顶点都被访问到二、算法复杂度:O(n+e) 邻接矩阵和邻接表都是实现BFS和DFS的方法,邻接矩阵时间...原创 2018-02-20 21:05:27 · 8149 阅读 · 1 评论 -
无向图-邻接矩阵深度优先遍历-DFS
一、算法思想【DFS】本算法以无向网为例,存储方式采用邻接矩阵1)将该网以邻接矩阵的方式存储,由于这里的示例采用无向图,因此它是一个对称阵2)选取A点为起始点,访问此顶点,用一个visit的bool型数组记录访问状态(false表示未被访问,true表示已访问)3)从A的未被访问的邻接点出发,深度优先遍历图,直到图中所有和v有路径相通的顶点都被访问到二、算法复杂度:O(n^2) 存储...原创 2018-02-20 21:11:27 · 6496 阅读 · 0 评论 -
21-实现带有min函数的栈和队列
一、题目描述【带有min函数的栈】实现一个栈,带有入栈(Push),出栈(Pop),取最小元素(getMin)三个方法。要保证三个方法的时间复杂度都尽可能小【带有min函数的队列】实现一个队列,带有出队(deQueue),入队(enQueue),取最小元素(getMin)三个方法。要保证三个方法的时间复杂度都尽可能小二、解题思路【带有min函数的栈】思路思路一:额外申请...原创 2018-09-02 19:39:01 · 820 阅读 · 2 评论