
数据结构
文章平均质量分 89
weixin_40805072
战五渣
展开
-
排序(练习)
1.设数组A[n]中存放有n个不同的整数,且每个整数的值均为0~n-1。设计一个算法,在O(N)的时间内将A中所有整数按从小到大排好序。解析:从i=0开始逐个检查A[i]。若A[i]≠i,交换A[i]与A[A[i]],将A[i]送入最终应在的位置;若A[i]=i,检查下一个A[i]直到A[i]检查完毕void adjust(int A[],int n){ int i,j; int...原创 2019-11-21 23:54:45 · 584 阅读 · 0 评论 -
StackAndQueue(练习)
1.设一个栈的输入序列为1,2,……n,编写算法判断序列p1,p2……pn是否是一个合理的栈输出序列解:当输入序列为1,2,3,当输出序列为2,3,1,预期为1进2进2出3进3出1出;当输出序列为3,1,2,预期为1进3进3出1出2进2出则经过试验发现不合理当前数据 1 2 3 栈顶数据 - 1 2 ...原创 2019-11-21 00:31:42 · 616 阅读 · 0 评论 -
avl小结
一、定义为了避免树的高度增长过快,降低二叉排序树的性能,规定在插入和删除而擦函数结点,保证任意结点的左、右子树高度差的绝对值不超过1,将这样的二叉树成为平衡二叉树。结点的平衡因子:该结点左子树高度 减去右子树高度所得的差,取值只有0,1,-1typedef int DataType;typedef struct node{ DataType data; //结点的数据值 ...原创 2019-11-09 00:18:08 · 929 阅读 · 0 评论 -
sort(ds-11-2)
1.分析排序方法的时间代价标准是什么?个人想法:以时间复杂度来衡量,标准是相同数据规模下对应的时间复杂度。通常排序元素的比较和交换消耗时间。解析:排序方法的时间代价包括排序码的比较次数和元素的移动次数。此外还需注意:选用元素中不同的数据项做排序码,会影响比较时间。例如复合项还是简单项,整数还是字符串。 待排序元素的初始排列对某些排序方法是有影响的。 待排序元素个数n也影响排序算法的...原创 2019-11-03 01:17:31 · 246 阅读 · 0 评论 -
单链表
一、基本概念带头结点和不带头结点的单链表带头结点的单链表,头指针head指向头结点,头结点的值域不包含任何信息,从头结点之后的结点开始存储信息。头指针head不等于NULL,head->next等于NULL时,链表为空。单链表结点定义typedef struct LNode{ int data; //data存放结点数据域 stru...原创 2019-08-05 15:50:59 · 4532 阅读 · 2 评论 -
树(存储、遍历)
一、二叉树的存储结构1.顺序存储简单常用的是双亲存储结构,用一维数组实现。用数组下标表示树中结点,数组元素表示该结点的双亲结点例如,下标为5对应的元素为3,则表明结点5的双亲结点为3;下标为1对应-1,表示1为根结点。(注:0代表不存在的空结点)2.链式存储因为顺序存储空间利用率低,所以一般用链式存储。链式结构指用一个链表来存储一棵二叉树。在二叉树种,结点结构通...原创 2019-08-07 23:10:18 · 161 阅读 · 0 评论 -
链表(变形)
单链表结点只有一个指向其后继的指针,使得单链表只能从头结点,依次顺序地向后遍历。要访问某个结点的前驱结点(delete,insert),只能从头开始遍历,访问后继结点的时间复杂度为O(1),访问前驱结点的时间复杂度O(n)一、双链表双链表结点中由两个prior和next,分别指向其前驱结点和后继结点。typedef struct DNode{ //定义结点类型 ...原创 2019-08-05 18:48:03 · 289 阅读 · 0 评论 -
队列
目录一、基本概念二、顺序队列三、链式队列四、双端队列 之前提到了栈,它是只能在一端插入删除的线性表。对照它,队列好比生活中的排队,总人数减少就是队头的人离开,总人数增多就是有新的人排在队尾。一、基本概念队列是一种限定存取位置的线性表。它只允许在一段出入,在另一端删除。队头:允许删除的一端队尾:允许插入的一端空队列:不...原创 2019-07-28 12:08:46 · 1157 阅读 · 0 评论 -
二叉树(树,森林,二叉树互转)
一、树转二叉树如图一个三叉树转为二叉树第一步:将同一结点的各孩子结点用虚线连起来第二步:将每个结点的分支从左往右除了第一个以外,其余的都剪掉第三步:调整结点使之符合二叉树的层次结构二、二叉树转树回顾上面把一个三叉树转为了二叉树,那么是否把这个操作逆过来就转回去了?第一步:将二叉树从左上到有下分为若干层。第二步:找到每一层结点在其上一层的父结点...原创 2019-08-09 01:12:01 · 4351 阅读 · 1 评论 -
树(概念性质)
(举目远望,绿色的大森林像海洋一样,连成一片,。树木长得郁郁葱葱,散发着舒心的凉爽。阳光像一缕缕金色的细沙,穿过层层叠叠的枝叶,洒落在草地上)滚回现实来!!!一、基本概念和性质说起树,我们想到的是扎在地下的根,茂盛的枝叶,以及粗壮的枝干。(几年不看语文,文学素养都掉光了)我们把现实的树,抽象出来。树由根出发,散开许多枝叶,好比结点之间的联系。1.名词:(1)上图中A,B...原创 2019-08-07 00:44:24 · 265 阅读 · 0 评论 -
树(应用)
一、哈夫曼树和哈夫曼编码1.基本概念路径:指从树中一个结点到另一个结点的分支所构成的路线 路径长度:指路径上的分支数目 树的路径长度:从根到每个结点的路径长度之和 带权路径长度:结点具有权值,从该结点到根之间的路径长度乘以结点的权值,就是该结点的带权路径长度 树的带权路径长度(WPL):树的带权路径长度是指树中所有叶子结点的带权路径长度之和 (wi为第i个带权叶子结点所带的权...原创 2019-08-09 17:07:57 · 176 阅读 · 0 评论 -
练习(tree)
一、一棵高度为h的满m叉树有如下性质:根结点所在层次为第1层,第h层上的结点都是叶结点,其余各层上的每个结点都有m棵非空子树,若按层次自顶向下,同一层自左向右,顺序从1开始对全部结点进行编号。(1)各层的结点个数为多少答:第一层有m^=1个,第二层有m^1个结点,第三层有m^2个结点.....一般的,第i层有m^i个(2)编号为i的结点的双亲结点(若存在)的编号为多少答:在m叉树的...原创 2019-08-24 23:52:42 · 8807 阅读 · 0 评论 -
练习(tq tree)
1.设二叉树根结点所在层次为1,树的深度d为举例根最远的叶结点所在层次(1)试精确给出深度为d的完全二叉树的不同二叉树棵树解:由二叉树性质,在d层最多有 个结点,故深度为d的不同完全二叉树有棵(2)试精确给出深度为d的满二叉树的不同二叉树棵树解:深度为d的满二叉树只有1棵2.假设二叉树采用二叉链式存储结构,设计算法(1)计算一棵给定二叉树的所有结点数法一:给出一棵二叉...原创 2019-09-02 00:57:31 · 1483 阅读 · 0 评论 -
图(1)
一、基本概念性质1.图由边和点组成,它是一个非空的集合2.若图中所有的顶点对<x,y>是有序的,则称为有向图。在有向图中<x,y>和<y,x>是不同的两条边3.如果图中所有的顶点对(x,y)是无序的,则称为无向图。4.完全图:在由n个顶点组成的无向图, 若任意两个顶点之间都存在边,有n(n-1)/2条边,则称为无向完全...原创 2019-09-03 00:29:39 · 1131 阅读 · 0 评论 -
最短路径
在带权图中,把一个顶点从v0到图中任意一个顶点vi的一条路径(可能不止一条)所经过边上的权值之和,定义为该路径的带权路径长度,把带权路几个长度最短的那条路径称为最短路径。带权有向图的最短路径分为两类 :(1)单源最短路径,即求图中某一个顶点到其他各个顶点的最短路径。(2)求每对顶点间的最短路径(----可能有人看完者定义就受不了了,什么东西-----)看下图,你要去...原创 2019-09-10 20:57:03 · 15836 阅读 · 3 评论 -
栈()
一、基本概念栈是只允许在一段进行插入和删除的线性表。 假如有一组数{1,2,3,4},存入栈里,1先到达栈底,然后依次进入,此时从栈底到栈顶分别为1,2,3,4当要把栈中的数取出去,由于我们只能在栈顶操作,所以先取出4,依次为3,2,1可以明显看到,有着先进后出的特点。栈顶:线性表...原创 2019-07-27 15:03:44 · 727 阅读 · 0 评论 -
排序(插入)
// 尽量让文章通俗易懂//排序生活中常常会用到,公司业级考核排名,学校成绩排名等等。假如我们是一个小白,面对几百个杂乱的数字 如何让他变得有序呢?我们会想到一个一个排序呗,先找到一个放在第一位,碰到比他大的放在 后面,比他小的放在前面。或者在这些树中找出最小的放在第一个,接着找次小的,依次..................这或许是解决问题的方法,但还有更高效的办法吗?...原创 2019-07-22 19:36:00 · 539 阅读 · 0 评论 -
线性表的应用(选首领)
选首领。N个游戏者围成一圈,从第一个人开始顺序报数,1,2,.凡报到3者退出圈子,最后留在圈中的人为首领。解:创建一个包含N个结点的单循环链表来模拟N个人围成 圈,其中结点的数据域存放游戏者的编号,该链表不设头结点,头指针为head。 程序中,以删除结点模拟人退出圈子,整型变量c (初值为1)用于计数,指针变量p初始时的指向与head相同。运行时,从p所指向的结点开始计数,p沿链...原创 2019-05-03 01:27:44 · 287 阅读 · 0 评论 -
线性表
一、基本概念定义:具有相同特性数据数据元素的有限序列(n为0代表空表)线性表只有一个表头元素和一个表尾元素,除去表头和表尾元素其余元素均只有一个前驱和一个后继。举个栗子:小明是表头元素,小白是表尾元素,其他人前面和后面都有人。 小明 小红 小兰 小水 小白 线性表分按存储结构分...原创 2019-06-23 01:51:15 · 176 阅读 · 0 评论 -
顺序表(实现)
一、顺序表因为系统没直接给提供数据结构,所以需要先定义对应数据结构的结构体 有了结构体,需要初始化该数据结构 初始化完毕,然后可以定义自己需要的操作二、代码解释1.初始化void list_init(List *L) //初始化{ L->elem=(Elemtype *)malloc(MAXSIZE*sizeof(Elemtype));//开辟空间...原创 2019-06-23 13:59:44 · 379 阅读 · 0 评论 -
每日练习(6-27)
1.从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删元素的值。空出的位置由最后一个元素填补,若顺序表为空则显示储存信息并退出运行。我的思路,(1)要删除先看表是否为空。为空则退出,不为空则进行找最小值。(2)咋样找最小值?设置个中间变量,将表中第一个的值赋给它,让它往下比,碰见比他大或者相等的继续往下找,碰见比它小的,则将此时小的值赋给中间变量,一直往下比,直到全部比完...原创 2019-06-28 00:22:24 · 196 阅读 · 0 评论 -
每日练习(6-28)
1.从顺序表中删除所有其值重复的元素,使表中所有元素的值均不同。个人第一想法:两个for循环,挨个比。1 2 1 3 2 1 比如上面的顺序表,for(i=0;i<6;i++)for(j=1;j<6;j++)if(L[i]==L[j])delete(L[j]);现在用1比,从表中第二个开始遍历,1不等于2,1等于1(记下这个...原创 2019-06-29 00:40:59 · 174 阅读 · 0 评论 -
数据结构绪论
一、数据结构概念1.基本概念 数据,数据元素,数据项,数据对象,数据结构,数据类型,抽象数据类型2.逻辑结构 逻辑结构 ,逻辑结构分类,逻辑结构特点3.存储结构 存储结构,存储结构分类二、算法设计与分析1基本概念:算法,算法特性,算法评价标准,算法描述语言,算法...原创 2019-07-12 01:04:23 · 224 阅读 · 0 评论 -
查找(1)
查找在生活中无处不在,电话簿找朋友电话,好友列表找人,聊天记录找历史记录等都用到查找。比如拿到一个杂乱无章的文章,我们会挨个比对,依次去找某个字,这叫顺序查找;拿起一本700多页的书,我们想翻到第340页,通常会目测,然后把书从中间翻开,如果翻到380页,就再往前面拿起一部分对半,知道找到;如果翻到320页,则往后面拿起一部分对半分,直到找到。这叫折半查找;当你拿起一份长长的职工信息表...原创 2019-07-17 01:05:15 · 224 阅读 · 0 评论 -
排序(交换)
目录一、冒泡排序二、快速排序交换排序的基本思想是:两两比较待排序对象的关键码,如果发生逆序,则交换,直到所有对象都排序完毕一、冒泡排序基本思想:设待排序表长为n,从后往前(或从前往后)两两比较相邻元素的值,若为逆序,则交换,直至序列比较完毕。(此时当前最大的交换到最后) 这称为一趟排序。经过多次 排序,最终排序完成。 ...原创 2019-07-24 13:41:19 · 166 阅读 · 0 评论 -
查找(2)
做题笔记1.顺序查找 不管线性表无序还是有序,成功查找第一个元素比较1次,成功查找第二个元素比较2次,所以每个元素的比较次数只与其位置有关。简记:**顺序查找与顺序无关**2.折半查找与二叉排序树 折半查找的性能可用二叉排序树来衡量,平均查找长度和最大查找长度都为O(log n); 二叉排序树的查找性能与数据的输入顺序有关,最好情况下平均查找...原创 2019-07-17 22:58:20 · 629 阅读 · 0 评论 -
排序(选择)
选择排序基本思想:每一趟(如第i趟)在后面n-i+1个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到n-1趟昨晚,待排序元素只剩下1个,就不用再选了。 人话:有一堆数,以升序为例子,第一次从这些数中找到最小的放在第一个位置,第二次从剩下的中找到最小的放在之前排好数后面,以此类推,直到待排序的数一个也没了。 简记:每次找最小,...原创 2019-07-25 15:08:18 · 624 阅读 · 0 评论 -
串
什么是串呢?我们打字输入的信息,便可称为串。串其实比较简单,类似于的线性表。我们在各种编程语言中直接使用,比如char [],或者 int []一、基本概念定义:由零个或多个字符组成的有限序列。串中字符的个数称为串的长度,含有零个元素的串叫空串。二、串的存储结构1.定长顺序存储表示typedef struct{ char str[maxSize+1]; in...原创 2019-08-03 01:27:31 · 289 阅读 · 0 评论 -
散列表
//尽可能让文章通俗易懂//一、基本概念散列表:通过将关键码映射到表中某个位置上来存储元素,然后根据关键码用同样的方式直接访问。(根据给定的关键字来计算关键字在表中的地址)Hash(key)=Addr通过散列函数建立了从元素关键码集合到散列表集合的一个映射。由于关键码集合比散列表结合大得多,经过散列函数计算把不同关键码映射到同一个散列地址,这会产生冲突。为了尽可能避免冲...原创 2019-07-22 01:37:38 · 1003 阅读 · 0 评论 -
排序(归并排序)
归并排序是建立在归并操作上的一种有效的排序算法归并排序将待排序的元素序列分成两个长度相等的子序列,为每一个子序列排序,然后再将它们合并成一个序列。合并两个子序列的过程称为二路归并。二路归并排序的算法描述:DataList mergeSort(DataList &L){ if(Length(L)<=1) return L; L1=...原创 2019-07-25 23:34:26 · 415 阅读 · 0 评论 -
顺序表逆置
终于开始开荒了,数据结构....先来个顺序表逆置,谁让我菜,先学学别人的代码。我想弄得就是这样,但是代码有小部分还搞不懂。先来搞搞基础。在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu;于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct ...原创 2019-04-18 00:35:20 · 1961 阅读 · 0 评论