![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
CarmenIsOK
这个作者很懒,什么都没留下…
展开
-
散列表处理冲突的方法
一、开放地址法所谓的开放定址法就是一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入。1.1 线性探测法fi ( key ) = ( f ( key ) + di ) MOD m (di=1,2,3,4,…,m-1)会出现不是同义词却需要争夺一个地址的情况,我们称这种情况为堆积。1.2 二次探测法关键字集合『12,67,56,16,25...原创 2020-02-23 00:35:38 · 3423 阅读 · 0 评论 -
散列表查找及其函数
一、散列表查找存储位置 = f (关键字)不需要通过关键字比较就可以获得记录的存储位置。散列技术就是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。散列是主要面向查找的存储结构。不适合散列的情况:一个关键字对应多条记录:比如以一个班的性别男女查找男同学女同学。不适合范围查找:查找一个班级的18~20岁的同学。冲突:...原创 2020-02-19 00:06:14 · 557 阅读 · 0 评论 -
数据结构——图的存储结构
图的存储结构1、邻接矩阵typedef char VertexType;typedef int EdgeType;#define MAXVEX 100#define INFINITY 65535typedef struct{ VertexType vexs[MAXVEX]; //顶点表 EdgeType arc[MAXVEX][MAXVEX];//邻接矩阵 int num...原创 2020-02-07 21:50:32 · 292 阅读 · 0 评论 -
线索二叉树
一、为什么需要线索二叉树?大部分二叉树,可以发现指针域并不是都充分利用,存在着很多空指针域,我们应该想办法利用起来。例如下图,很多“^”,浪费了内存空间。在中序遍历的时候我们得到一个序列 HDIBJEAFCG 这个字符序列。在进行中序遍历之后,我们就可以知道,结点I的前驱是D,后继是C。也就是说我们可以清楚的知道任意一个结点,它的前驱和后驱结点是哪一个。综合那些空指针,我们可以用来存放前...原创 2020-02-06 23:36:06 · 167 阅读 · 0 评论 -
数据结构——树
一、树的存储结构1、双亲表示法假设有一组连续空间存储树的结点,同时在每个结点中,附设一个指示器指示其双亲结点到链表的位置。也就是说,每个结点除了知道自己是谁以外,还知道它的双亲在哪里。#define MAX_TREE_SIZE 100typedef int TElemType;typedef struct PTNode{ TElemType data;//结点数据 int pare...原创 2020-02-06 17:40:32 · 175 阅读 · 0 评论 -
哈希表
一、哈希表结构特点:快常用结构:顺序表+链表主结构:顺序表每个顺序表的节点在单独引出一个链表二、添加数据计算哈希码计算在哈希表中的存储位置存入哈希表情况1:一次添加成功情况2:多次添加成功(出现了冲突,调用equals()和对应链表的元素进行比较,比较到最后,结果都是false的话,创建新节点,存储数据,并加入链表末尾)情况3:不添加(出现了冲突,调用eauqls()...原创 2019-11-13 20:19:49 · 168 阅读 · 0 评论 -
B树(B-树)、B+树
B树、B+树、B*树的引入二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced Binary Search Tree),红黑树(Red-Black Tree ),B-tree/B±tree/ B*-tree (B~Tree)。前三者是典型的二叉查找树结构,其查找的时间复杂度O(log2N)与树的深度相关,那么降低树的深度自然会提高查找效率。在大规模的数据存储中,...原创 2019-07-25 11:45:56 · 260 阅读 · 0 评论 -
红黑树
红黑树的优势二叉查找树:左子树的所有节点的值均小于或等于它根节点的值右子树的所有节点的值均大于或等于它根节点的值左、右子树也分别为二叉排序树二叉查找树蕴含着二分查找的思想,查找所需的次数等同于二查找树的高度。但是二叉查找树存在着一定的缺陷。二叉查找树会因为插入的数值不均衡导致树的高度随着插入的节点个数的增多而线性增长。例如:插入7,6,5,4,3,二叉树就退化成不平衡的链表结构...原创 2019-07-24 21:59:40 · 257 阅读 · 0 评论 -
2.图之最小生成树、拓扑排序
最小生成树(Minimum Spanning Tree)(1)是一棵树:无回路、V个顶点一定有V-1条边(2)是生成树:包含全部顶点、V-1条边都在图里(3)边的权重和最小最小生成树存在<—>图连通贪心算法什么是“贪”:每一步都要最好的什么是“好”:权重最小的边需要约束:只能用图里有的边只能正好用掉V-1条边不能有回路Prim算法----让一棵小树长大时间复...原创 2019-04-20 19:53:37 · 539 阅读 · 0 评论 -
1.图
六度空间理论:跟任意一个陌生人认识,但可能朋友的朋友有一个共同的朋友,通过不超过6个人即可。什么是图(Graph)表示多对多的关系包含:一组顶点:通常用V(Vetex)表示顶点集合一组边:通常用E(Edge)表示边的集合(1)边是顶点对:(v,w)∈E,其中v,w∈V(2)有向边<v,w>表示从v指向w的边(单行线)(3)不考虑重边和自回路抽象数据类型定义...原创 2019-04-06 11:45:18 · 712 阅读 · 0 评论 -
3.树之堆、哈夫曼树以及集合
堆的定义优先队列(priority queue):特殊的“队列”,却出元素的顺序是依照元素的优先权(关键字)大小,而不是元素进入队列的先后顺序。若采用数组或者链表实现优先队列:数组插入:元素总是插入尾部 ~O(1)删除:查找最大(最小)关键字 ~O(n)———从数组中删除元素并移动~O(n)链表插入:元素总是插入链表的头部~O(1)删除:查找最大(最小)关键字 ~O(n...原创 2019-04-14 10:07:15 · 2293 阅读 · 0 评论 -
2.树之搜索/完全二叉树和平衡二叉树
二叉搜索树又称二叉排序树、二叉查找树查找操作:递归或者循环,循环更好Position FindMin(BinTree BST)//遍历左子树知道某个结点左子树为空Position FindMax(BinTree BST)//遍历右子树知道某个结点右子树为空插入操作:BinTree Insert(ElementType X,BinTee BST){ if(!BST)//原...原创 2019-08-04 21:09:27 · 491 阅读 · 0 评论 -
1.树之树的遍历
递归先序、中序、后序非递归使用堆栈:例如中序遍历:1.遇到一个结点,就把它压栈,并且去遍历它的左子树;2.当左子树遍历结束后,从栈顶弹出这个结点并访问它的;3.然后按其右指针再去中序遍历该结点的右子树层序遍历1.队列实现:遍历从根结点开始,首先按将根结点入队,然后开始执行循环:结点出队、访问该结点、其左右儿子入队。题目:Given a tree, you are supp...原创 2019-03-16 17:20:14 · 170 阅读 · 0 评论 -
线性表及其实现
多项式的表示一元多项式及其运算顺序存储结构直接表示a[i]=ai,aix^i。指数i为索引,而数组存储对应第i个项的系数。每个分量代表系数。 但当表示多项式x+3x^2000,需要2001个分量,造成空间的浪费顺序存储结构表示非零项非零项aix^i:系数ai和指数i,可以将一个多项式堪称一个(ai,i)二元组的集合。每个分量包含系数和指数。结构数组:数组分量是由系数...原创 2019-03-09 16:56:46 · 309 阅读 · 0 评论 -
最长子序列
最大子数组C++语言编写数组中有负数才有意义采用分治方法,最大子数组的位置在中点左边,中点右边和在跨越中点。由此将整个数据求累积和分成三段,分别计算累计和。若最大子数组在段中,那么最大子数组在段的位置为中点左边,右边和跨越中点处,因此可以采用迭代算法。若在其他段同段处理。首先计算出跨越中点的段的最大值即左右下标。跨越中点:void FindMaxCrossingSubarray(i...原创 2019-03-04 00:02:29 · 404 阅读 · 0 评论