数据结构
SuperSources
这个作者很懒,什么都没留下…
展开
-
【数据结构】分配排序
基于分配和收集基本思想先将数据分配到不同的桶中再将桶中的数据收集到一起两种方法桶式排序(单关键字排序)链式基数排序(多关键字排序)特点排序过程无须比较关键字,而是通过“分配”和“收集”过程来实现排序它们的时间复杂度可达到线性阶:O(n)。桶式排序假设待排序的记录的值在0~m-1之间设置m个桶,依次扫描待排序的记录,R[1],…,R[n-1],把关键字等于k的记录全都装入到...原创 2019-12-20 22:28:35 · 1202 阅读 · 0 评论 -
【数据结构】归并排序
归并:将两个或两个以上的有序序列合并成一个有序序列的过程。归并排序的主要操作是归并,其主要思想是:将若干有序序列逐步归并,最终得到一个有序序列。基本思想:将一个具有n个待排序记录的序列看成是n个长度为1的有序序列,然后进行两两归并,得到n/2个长度为2的有序序列,再进行两两归并,得到n/4个长度为4的有序序列,……,直至得到一个长度为n的有序序列为止。void Merge (in...原创 2019-12-20 22:00:30 · 138 阅读 · 0 评论 -
【数据结构】选择排序
简单排序void selectSort ( int r[ ], int n){ for ( i=1; i<n; i++) { index=i; for (j=i+1; j<=n; j++) if (r[j]<r[index]) index=j; if (index...原创 2019-12-20 21:44:25 · 249 阅读 · 0 评论 -
【数据结构】交换排序
交换排序的主要操作是交换,其主要思想是:在待排序列中选两个记录,将它们的关键码相比较,如果反序(即排列顺序与排序后的次序正好相反),则交换它们的存储位置。交换类排序的两种方法冒泡排序快速排序起泡排序基本思想:两两比较相邻记录的关键码,如果反序则交换,直到没有反序的记录为止。void BubbleSort(int r[ ], int n){ exchange=n; ...原创 2019-12-20 21:39:59 · 167 阅读 · 0 评论 -
【数据结构】插入类排序
插入排序的主要操作是插入,其基本思想是:每次将一个待排序的记录按其关键码的大小插入到一个已经排好序的有序序列中,直到全部记录排好序为止。插入类排序方法有以下两种:直接插入排序希尔排序直接插入排序void insertSort (int r[ ], int n){ for (i=2; i<=n; i++) { r[0]=r[i]; j=i-1;...原创 2019-12-20 20:11:05 · 264 阅读 · 0 评论 -
【数据结构】排序概述
排序的分类-根据排序过程中所进行的基本操作分:基于比较:基本操作——关键码的比较和记录的移动,其最差时间下限已经被证明为O(nlog2n)。不基于比较:根据关键码的分布特征。比如,桶式排序,基数排序(多关键字排序)基于比较的内排序插入排序交换排序选择排序归并排序不基于比较的排序1.分配排序2.桶式排序3.基数排序排序算法的存储结构从操作角度看,排序是线性结构的一种...原创 2019-12-20 17:27:38 · 143 阅读 · 0 评论 -
【数据结构】散列表(hash)的查找技术
散列函数的构造直接定址法除留余数法数字分析法平方取中法折叠法(分段叠加法)冲突处理方法开放定址法链地址法建立公共溢出区散列的基本思想:在记录的存储地址和它的关键码之间建立一个确定的对应关系。这样,不经过比较,一次读取就能得到所查元素的查找方法。基本概念1.散列表:采用散列技术将记录存储在一块连续的存储空间中,这块连续的存储空间称为散列表。2.散列函数:将关键码映射为散...原创 2019-12-20 17:23:29 · 737 阅读 · 0 评论 -
【数据结构】B-树
定义m阶B-树:是满足下列特性的树:(1) 树中每个结点至多有m棵子树;(2) 若根结点不是终端结点,则至少有两棵子树;(3) 除根结点外,其他非终端结点至少有【m/2】(向上取整) 棵子树;(4)所有非终端结点都包含以下数据:(n,A0,K1,A1,K2,…,Kn,An)其中,n(【m/2】(向上取整)-1≤n≤m -1)为关键码的个数;Ki(1≤i≤n)为关键码,且Ki<Ki...原创 2019-12-20 13:22:13 · 718 阅读 · 0 评论 -
【数据结构】平衡二叉树(AVL树)
1.平衡二叉树:或者是一棵空的二叉排序树,或者是具有下列性质的二叉排序树:⑴ 根结点的左子树和右子树的深度最多相差1;⑵ 根结点的左子树和右子树也都是平衡二叉树。2.平衡因子:结点的平衡因子是该结点的左子树的深度与右子树的深度之差。3.结点的平衡因子=HL-HR4.在平衡树中,结点的平衡因子可以是1,0,-1。5.最小不平衡子树:在平衡二叉树的构造过程中,以距离插入结点最近的、且平衡因...原创 2019-12-20 13:18:45 · 259 阅读 · 0 评论 -
【数据结构】树表的查找技术
二叉排序树(BST)平衡二叉树(AVL)二叉排序树(Binary Search Tree)二叉排序树(也称二叉查找树):或者是一棵空的二叉树,或者是具有下列性质的二叉树:⑴若它的左子树不空,则左子树上所有结点的值均小于根结点的值;⑵若它的右子树不空,则右子树上所有结点的值均大于根结点的值;⑶ 它的左右子树也都是二叉排序树。#include <iostream>using...原创 2019-12-20 13:00:56 · 263 阅读 · 0 评论 -
【数据结构】线性表的查找技术
顺序查找普通的顺序查找方法带监视哨的顺序查找方法折半查找折半查找的判定树声明#include using namespace std;const int MaxSize = 100;class LineSearch{public: LineSearch(int a[ ], int n); //构造函数 ~LineSearch( ) { } //析构函数为空...原创 2019-12-01 14:58:06 · 332 阅读 · 0 评论 -
【数据结构】查找概述
1、静态查找 :不涉及插入和删除操作的查找 。2、动态查找 :涉及插入和删除操作的查找。3、静态查找适用于:查找集合一经生成,便只对其进行查找,而不进行插入和删除操作; 或经过一段时间的查找之后,集中地进行插入和删除等修改操作;4、动态查找适用于:查找与插入和删除操作在同一个阶段进行,例如当查找成功时,要删除查找到的记录,当查找不成功时,要插入被查找的记录。5、线性表:适用于静态查找,主要...原创 2019-12-01 14:47:36 · 224 阅读 · 0 评论 -
【数据结构】图的连通性
连通图:仅需从图中任一顶点出发,进行深度优先搜索(或广度优先搜索),便可访问到图中所有顶点。非连通图:需从多个顶点出发进行搜索,而每一次从一个新的起始点出发进行搜索过程中得到的顶点访问序列恰为其各个连通分量中的顶点集。无向图的连通性要想判定一个无向图是否为连通图,或有几个连通分量,通过对无向图遍历即可得到结果。count=0;for (图中每个顶点v)2.1 if (v尚未被访问过)...原创 2019-12-01 14:42:57 · 615 阅读 · 0 评论 -
【数据结构】有向无环图
AOVAOV网:在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,称这样的有向图为顶点表示活动的网,简称AOV网。AOV网特点1.AOV网中的弧表示活动之间存在的某种制约关系。2.AOV网中不能出现回路 。拓扑序列:设G=(V,E)是一个具有n个顶点的有向图,V中的顶点序列v1, v2, …, vn称为一个拓扑序列,当且仅当满足下列条件:若从顶点vi到vj有一条路径...原创 2019-12-01 14:38:36 · 1456 阅读 · 0 评论 -
【数据结构】最短路径
在非网图中,最短路径是指两顶点之间经历的边数最少的路径。在网图中,最短路径是指两顶点之间经历的边上权值之和最短的路径。单源点到其他顶点的最短路径Dijkstra方法,O(n2)任意一对顶点之间的最短路径Floyed方法,O(n3)单源点最短路径问题问题描述:给定带权有向图G=(V, E)和源点v∈V,求从v到G中其余各顶点的最短路径。迪杰斯特拉(Dijkstra)提出了一个按路径...原创 2019-12-01 14:22:34 · 1444 阅读 · 0 评论 -
【数据结构】最小生成树MST(minimal spanning tree)
1、生成树的代价:设G=(V,E)是一个无向连通网,生成树上各边的权值之和称为该生成树的代价。2、最小生成树:在图G所有生成树中,代价最小的生成树称为最小生成树。3、性质假设G=(V, E)是一个无向连通网,U是顶点集V的一个非空子集。若(u, v)是一条具有最小权值的边,其中u∈U,v∈V-U,则必存在一棵包含边(u, v)的最小生成树。4、构造最小代价生成树两种方法:Prime法:...原创 2019-12-01 13:01:56 · 2005 阅读 · 0 评论 -
【数据结构】图的存储结构及实现
注意:图无法采用顺序存储结构!!!顶点之间的关系是m:n,即任何两个顶点之间都可能存在关系(边),无法通过存储位置表示这种任意的逻辑关系。邻接矩阵(数组表示法)1、基本思想:用一个一维数组存储图中顶点的信息用一个二维数组(称为邻接矩阵)存储图中各顶点之间的邻接关系。(边)2、邻接矩阵无向图(1)无向图的邻接矩阵的特点?主对角线为 0 且一定是对称矩阵。(2)如何求顶点i的度...原创 2019-12-01 12:19:37 · 999 阅读 · 0 评论 -
【数据结构】图的遍历概述
图的遍历是从图中某一顶点出发,对图中所有顶点访问一次且仅访问一次。是一种抽象操作,可以是对结点进行的各种处理,这里简化为输出结点的数据。关键问题① 在图中,如何选取遍历的起始顶点?在图中,任何两个顶点之间都可能存在边,顶点是没有确定的先后次序的,所以,顶点的编号不唯一。为了定义操作的方便,将图中的顶点按任意顺序排列起来,比如,按顶点的存储顺序。解决方案:从编号小的顶点开始 。② 从某...原创 2019-12-01 11:26:52 · 363 阅读 · 0 评论 -
【数据结构】二叉树的遍历操作
定义1、二叉树的遍历是指从根结点出发,按照某种次序访问二叉树中的所有结点,使得每个结点被访问一次且仅被访问一次。2、是抽象操作,可以是对结点进行的各种处理,这里简化为输出结点的数据。3、访问分类前序遍历:若二叉树为空,则空操作返回;否则:①访问根结点;②前序遍历根结点的左子树;③前序遍历根结点的右子树。中序遍历:若二叉树为空,则空操作返回;否则:①中序遍历根结点的左子树;②...原创 2019-12-01 00:11:28 · 653 阅读 · 0 评论 -
【数据结构】二叉树的逻辑结构
研究二叉树的意义?问题转化:将树转换为二叉树,从而利用二叉树解决树的有关问题。二叉树的定义二叉树是n(n≥0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。注意二叉树定义的递归性!!!二叉树的特点:⑴ 每个结点最多有两棵子树;⑵ 二叉树是有序的,其次序不能任意颠倒。特殊的二叉树斜树1、定义1...原创 2019-11-30 23:32:20 · 1843 阅读 · 1 评论 -
【数据结构】树的存储结构
顺序存储:本质上是静态指针双亲表示法双亲、孩子表示法链式存储:多重链表示法孩子链表表示法孩子兄弟表示法 详见 树的逻辑结构原创 2019-11-30 23:16:07 · 112 阅读 · 0 评论 -
【数据结构】图的逻辑结构
基础概念1、含有n个顶点的无向完全图有n×(n-1)/2条边。2、含有n个顶点的有向完全图有n×(n-1)条边。3、4、连通图:在无向图中,如果从一个顶点vi到另一个顶点vj(i≠j)有路径,则称顶点vi和vj是连通的。如果图中任意两个顶点都是连通的,则称该图是连通图。5、连通分量:非连通图的极大连通子图称为连通分量。6、强连通图:在有向图中,对图中任意一对顶点vi和vj (i≠...原创 2019-11-30 23:08:19 · 1731 阅读 · 0 评论 -
【数据结构】树的逻辑结构
树的定义树:n(n≥0)个结点的有限集合。当n=0时,称为空树;任意一棵非空树满足以下条件:⑴ 有且仅有一个特定的称为根的结点;⑵ 当n>1时,除根结点之外的其余结点被分成m(m>0)个互不相交的有限集合T1,T2,… ,Tm,其中每个集合又是一棵树,并称为这个根结点的子树。树的定义是采用!!递归!!方法树的遍历操作1.树的遍历:从根结点出发,按照某种次序访问树中所有结点,使...原创 2019-11-26 22:07:18 · 4956 阅读 · 0 评论 -
【数据结构】多维数组
(多维)数组——线性表中的数据元素可以是线性表,但所有元素的类型相同。广义表——线性表中的数据元素可以是线性表,且元素的类型可以不相同。数组的基本操作⑴ 存取:给定一组下标,读出对应的数组元素;⑵ 修改:给定一组下标,存储或修改与其相对应的数组元素。存取和修改操作本质上只对应一种操作——寻址数组没有插入和删除操作,所以,不用预留空间,适合采用顺序存储。数组的存储结构与寻址——一维数...原创 2019-11-08 21:49:33 · 773 阅读 · 0 评论 -
【数据结构】字符串
字符串顺序串:用数组来存储串中的字符序列。链接串:用链接存储结构来存储串。如何表示串的长度?方案1:用一个变量来表示串的实际长度。方案2:在串尾存储一个不会在串中出现的特殊字符作为串的终结符,表示串的结尾。方案3:用数组的0号单元存放串的长度,从1号单元开始存放串值。模式匹配给定主串S="s1s2…sn"和模式T=“t1t2…tm”,在S中寻找T 的过程称为模式匹配。如果匹配成...原创 2019-11-08 21:32:30 · 203 阅读 · 0 评论 -
【数据结构】队列的链式存储结构及实现
利用单链表实现队列的链式存储队头指针即为链表的头指针实现声明template <class T>class LinkQueue{ public: LinkQueue( ); ~LinkQueue( ); void EnQueue(T x); T DeQueue( ); T Ge...原创 2019-11-08 20:13:33 · 184 阅读 · 1 评论 -
【数据结构】顺序队列
基本概念队列的操作特性:先进先出(FIFO,LILO)队列的顺序存储结构及实现入、出队操作时间性能为O(1)出队操作(放宽队列的所有元素必须存储在数组的前n个单元这一条件 ,只要求队列的元素存储在数组中连续的位置。)队头指针和队尾指针的说明队头指针指向队列中的第一个元素之前的元素,队尾指针指向队列中的最后一个元素队列的移动特点整个队列向数组下标较大方向移动单向移动性->...原创 2019-11-08 20:06:30 · 262 阅读 · 0 评论 -
【数据结构】栈的链式存储结构及实现
将链头作为栈顶,链栈不需要附设头结点。链栈的声明template <class T>class LinkStack{ public: LinkStack( ) {top=NULL;}; ~LinkStack( ); void Push(T x); T Pop( ); ...原创 2019-11-08 19:24:02 · 131 阅读 · 0 评论 -
【数据结构】建立排序的单链表
分析构造链表,使得在插入过程中,依次将要插入的数据同链表中的数据进行比较,确定插入点进行插入.插入过程:寻找比插入值(element)大的第一个节点,查找成功的情况下,进行插入。如果查找失败,则新插入的节点为最后一个节点实现即n次调用“有序链表的插入”函数void LinkList<T>::create(T a[],int n){ for(int i=0,i&...原创 2019-11-07 22:37:18 · 297 阅读 · 0 评论 -
【数据结构】有序(升序)链表的插入
插入过程寻找比插入值(element)大的第一个节点及其前驱,查找成功的情况下,进行插入。如果查找失败,则新插入的节点为最后一个节点实现 void LinkList<T>::Insert(T x){ Node<T> *s,*p,*front; s=new Node<T>; s->data=x; front=first; p=first-...原创 2019-11-07 22:35:01 · 1351 阅读 · 0 评论 -
【数据结构】带头结点的单链表逆转
算法描述1.如果链表为空表,抛出异常2.设置三个辅助变量p(指向链表的首元结点),q(指向p的后继结点,初值为null)3.建立逆转之后的空表:First->next=Null4.在原链表不空的情况下,重复做以下工作:用q记录P的后继(原链表的新的头结点)p.next=first->next; first->next=p //将p作为首元结点,链入逆转之后的表中原链...原创 2019-11-07 22:33:10 · 2475 阅读 · 0 评论 -
【数据结构】不带头结点的单链表逆转
设置三个辅助变量p:指向链表的头结点,头指针,初值为list.firstq:指向p的后继结点,初值为NULL,front: 逆转之后的链表的头指针,初值为NULL。算法描述抓住头插的特点!头插就是倒序!!所以逆转就是将原链表的所有元素重新做一遍头插,形成新链表1.如果链表为空表,抛出异常2.设置三个辅助变量p(指向链表的头结点,头指针,初值为list.first),q(指向p的后...原创 2019-11-07 22:22:21 · 2302 阅读 · 0 评论 -
【数据结构】一元多项式的表示及相加
建立一元多项式的链式存储用单链表存储多项式的结点结构如下: struct Polynode { int coef; int exp; Polynode *next; }多项式相加的过程1.两个多项式中所有指数相同的项的对应系数相加, 若和不为零,则构成“和多项式”中的一项;2.所有指数不相同的项均复抄到“和多...原创 2019-11-07 22:03:55 · 2948 阅读 · 0 评论 -
【数据结构】两栈共享空间(双端栈)
1、定义两栈共享空间:使用一个数组来存储两个栈,让一个栈的栈底为该数组的始端,另一个栈的栈底为该数组的末端,两个栈从各自的端点向中间延伸。栈1的底固定在下标为0的一端;栈2的底固定在下标为StackSize-1的一端。top1和top2分别为栈1和栈2的栈顶指针;Stack_Size为整个数组空间的大小(图中用S表示);2、性质栈1为空:top1= -1栈2为空:top2= St...原创 2019-11-06 21:22:29 · 2283 阅读 · 2 评论 -
【数据结构】顺序栈
1、基本概念栈只是对表插入和删除操作的位置进行了限制,并没有限定插入和删除操作进行的时间。2、栈的顺序存储结构及实现进栈:top加1出栈:top减1栈空:top= -1栈满:top= MAX_SIZE-13、顺序栈的声明const int MAX_SIZE=100;template <class T>class seqStack{ public...原创 2019-11-06 21:12:35 · 106 阅读 · 0 评论 -
【数据结构】其他链表
静态链表间接寻址(指针数组)线性表的顺序存储的优点:支持随机访问线性表的链式存储的优点:插入和删除数据时不需要移动数据间接寻址:将指针和数组结合起来的一种方法,它将数组中的存储数据元素的单元改为存储指向该元素的指针...原创 2019-11-06 18:37:13 · 119 阅读 · 0 评论 -
【数据结构】双链表
节点结构template <class T>struct DNode{ T data; DNode<T> *llink; DNode <T>*rlink;}; 1、空表first->rlink=NULLfirst->llink=NULLLast=first2、插入原则1、先处理每个方向的远端指针,再处理近端指针...原创 2019-11-06 18:37:03 · 702 阅读 · 0 评论 -
【数据结构】循环链表
特点首尾相接的链表。可以从任一节点出发,访问链表中的所有节点。判断循环链表中尾结点的特点:q->next==first1、循环链表的定义template <class T>struct Node{ T data; Node<T> *next;};template <class T>class CycleLinkList{...原创 2019-11-06 18:36:55 · 603 阅读 · 0 评论 -
【数据结构】线性表的链式存储结构及实现
链式存储分配的特点:根据线性表的长度动态的申请存储空间,以解决顺序存储中存在的存储空间难以确定的问题。指针变量的特点变量的三要素名字,内存地址,值变量的左值,右值左值指变量的内存地址右值:值在赋值表达式中,赋值号左边需要左值,右边需要右值;如a=a+100指针变量指针变量的右值本身又是一个左值。1、链表结点数据类型的定义template <typename T>...原创 2019-11-06 18:36:40 · 1205 阅读 · 0 评论 -
【数据结构】线性表的顺序存储结构及其实现
第二节、线性表的顺序存储结构及其实现1、顺序表特点:线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素。作用:线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系。 (不占用额外内存来存储数据之间的关系)顺序存储的实现:一维数组存储顺序表中的数据(所有的顺序存储全部使用一维数组来存储)顺...原创 2019-11-06 18:36:25 · 810 阅读 · 0 评论