
数据结构
文章平均质量分 59
Double 卓
这个作者很懒,什么都没留下…
展开
-
计算子串在主串的次数(kmp算法)
一、问题描述这是一道模板题,给定一个字符串A和一个字符串B,求B在A中的出现次数。A和B中的字符均为英语大写字母或者小写字母。A中不同位置出现的B可重叠。输入格式:输入共两行,分别是字符串A和字符串B输出格式:输出一个整数,表示B在A中的出现次数。样例:输入:zyzyzyzzyz输出:3二、KMP算法介绍此处参考文档为:字符串匹配的KMP算法 - 阮一峰的网络日志 (ruanyifeng.com)看了好多篇的介绍,认为这篇讲的最清楚,放入此原创 2022-01-13 12:57:43 · 6463 阅读 · 2 评论 -
数据结构第四章(二叉搜索树的定义以及删除操作的实现)
查找问题:1.静态查找和动态查找。2.针对动态查找,数据应该如何组织? 什么是二叉搜索树(二叉搜索树也称二叉排序树或二叉查找树)?二叉搜索树:一棵二叉树,可以为空,如果不为空,满足以下性质 1.非空左子树的键值小于其根节点的键值 2.非空右子树~~~~大于~~~~~~~~~~ 3.左右子树都是二叉搜索树 ...原创 2019-02-09 20:27:34 · 205 阅读 · 0 评论 -
数据结构第四章(平衡二叉树的定义以及四种旋转使二叉树变成平衡二叉树的方法)
“平衡因子”:BF(T)=h(L)-h(R)其中h(L)和h(R)分别为T的左右子树的高度。平衡二叉树 (AVL树(提出平衡树的人名首字母)) 空树或者任一节点左右子树高度差的绝对值不超过1,即-1=<BF(T)<=1 平衡二叉树的调整:记住一点:无论怎么调整,都要保证还是二叉搜索树,左子树要比根结点小,右子树要比根结点大 深度:对于任意结点n,n的深...原创 2019-02-09 20:30:54 · 1044 阅读 · 0 评论 -
数据结构第四章(链表逆转(可只逆转前k个元素))
单链表的逆转:全部代码实现如下:#include <stdio.h>#include <stdlib.h>typedef int ElementType;typedef struct Node *PtrToNode;struct Node { ElementType Data; PtrToNode Next;};typedef...原创 2019-02-09 20:33:05 · 354 阅读 · 0 评论 -
数据结构--时间复杂度与空间复杂度的计算
算法的时间复杂度和空间复杂度详解 通常,对于一个给定的算法,我们要做 两项分析。第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关推理模式,如循环不变式、数学归纳法等。而在证明算法是正确的基础上,第二部就是分析算法的时间复杂度。算法的时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程度上能很好反映出算法的优劣与否。因此,作为程序员,掌握基本的算法时间复杂度分析方...转载 2019-02-27 15:13:46 · 10272 阅读 · 1 评论 -
第六章--图邻接矩阵实现(两种方式)
邻接矩阵实现(快速建立方式)#include<stdio.h>#define MaxVertexNum 20int main(){ int G[MaxVertexNum][MaxVertexNum]; int Nv,Ne,GData[MaxVertexNum],i,j; int v1,v2,w; printf("请输入结点数和边数:\n"); scanf("%...原创 2019-02-17 19:49:23 · 461 阅读 · 0 评论 -
第六章--图邻接表实现
#include<stdio.h>#include<stdlib.h>#define OK 1#define ERROR 0#define MaxVertexNum 20typedef int WeightType;typedef int VertexType;typedef int Status;typedef struct GNode *PtrTo...原创 2019-02-17 19:49:55 · 345 阅读 · 0 评论 -
(小白专场)六度空间
7-7 六度空间 (30 分)“六度空间”理论又称作“六度分隔(Six Degrees of Separation)”理论。这个理论可以通俗地阐述为:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过五个人你就能够认识任何一个陌生人。”如图1所示。图1 六度空间示意图“六度空间”理论虽然得到广泛的认同,并且正在得到越来越多的应用。但是数十年来,试图验证这个理论始终是许...原创 2019-02-17 19:52:42 · 214 阅读 · 0 评论 -
数据结构学习心得
任意一种数据结构都可以用数组来表示解决问题的效率与数据组织的方式有关,这就是为什么要学习数据结构。考虑算法,不仅要考虑时间复杂度还要考虑空间复杂度。 ...原创 2019-02-17 20:18:08 · 1907 阅读 · 0 评论 -
数据结构第四章(两个序列是否是同一棵二叉搜索树)
两个序列是否对应相同搜索树的判别:算法1:分别建两棵搜索树的判别方法,根据两个序列分别建树,再判别树是否一样算法2:不建树的判别方法。算法3:建一棵树,再判别其他序列是否与该树一致方法:在树T中按顺序搜索序列中的每个数 如果每次搜索所经过的结点在前面均出现过,则一致 否则(某次搜索中遇到前面未出现的结点),则不一致MakeTree(i...原创 2019-02-09 20:17:51 · 481 阅读 · 0 评论 -
第三章(小结)
树--层次管理 使得操作起来效率更高查找:静态查找(集合中的记录是固定的,没有插入和删除操作,只有查找) 动态查找(集合中的记录是不固定的,除了查找,可能会发生插入和删除)查找方法:1.顺序查找(可建立哨兵,不用判断下标是否越界)2.二分查找(条件:数据有序化)二分查找时间复杂度分析 因为二分查找每次排除掉一半的不适合值,所以对于n个元素的情况:一次二分剩下:n...原创 2019-02-08 08:24:25 · 483 阅读 · 0 评论 -
数据结构(第一章--简介)
主要内容:什么是数据结构,什么是算法,最大子序列和,时间复杂度,空间复杂度解决问题的效率与什么有关?解决问题的效率与数据组织的方式是相关的(查找和添加图书的效率与摆放图书的方式有关)解决问题的效率与空间利用效率是有关的 (递归与非递归的比较) 与算法的巧妙程度有关 (多项式求和有两种算法可以实现 但剥皮算法比直接计算更为巧妙...原创 2019-01-27 10:46:54 · 554 阅读 · 0 评论 -
数据结构(第二章)(线性表,广义表,多重链表,栈以及实现)(链表删除)
链表删除操作:#include<stdio.h>#include<stdlib.h>#define MAXN 10000 typedef struct Node{ char c; struct Node *Next;}Node,*LNode;void Delete(LNode head,char c){ LNode p,q,s; q=head;...原创 2019-01-28 11:37:26 · 271 阅读 · 0 评论 -
数据结构第五章(堆中的路径)(附上输出行末没有多余空格的解决办法)
7-5 堆中的路径 (25 分)将一系列给定数字插入一个初始为空的小顶堆H[]。随后对任意给定的下标i,打印从H[i]到根结点的路径。输入格式:每组测试第1行包含2个正整数N和M(≤1000),分别是插入元素的个数、以及需要打印的路径条数。下一行给出区间[-10000, 10000]内的N个要被插入一个初始为空的小顶堆的整数。最后一行给出M个下标。输出格式:对输入中给出的每个下...原创 2019-02-15 15:42:43 · 1942 阅读 · 0 评论 -
数据结构第五章(集合的表示)
集合的表示 集合运算:交、并、补、差,判定一个元素是否数与某一集合并查集:集合并、查某元素属于什么集合并查集问题中集合存储如何实现?用树存,每个结点除去存储自身信息以外,再存储父亲结点的位置 这叫双亲表示法...原创 2019-02-15 15:44:48 · 533 阅读 · 0 评论 -
第三章(二叉树的先序、中序(非递归实现))
#include<stdio.h>#include<stdlib.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INSEASIBLE -1#define OVERFLOW -2#define STACK_INIT_SIZE 100#define STACKINCREAM...原创 2019-02-07 09:42:16 · 166 阅读 · 0 评论 -
第三章(二叉树的后序(非递归实现))
后序遍历后序遍历要求左右子树均完成后才对自身进行访问。入栈时,先将右子树(若存在)入栈再将左子树(若存在)入栈,然后指向左孩子(若存在左孩子,否则指向右孩子)。在对这个部分结点构成的栈进行出栈操作时,应该注意到两个特点。第一、叶结点,他是左右子树均为空,而跳出循环时,从栈顶推出。第二、任一结点出栈后,考察他和栈顶结点的关系,若是双亲关系,则说明下一个结点在该结点访问完后也可以访问,直接出栈即可。...原创 2019-02-07 09:44:07 · 137 阅读 · 0 评论 -
第三章(非递归层序遍历二叉树(c语言实现))
#include<stdio.h>#include<stdlib.h>#define TURE 1#define FALSE 0#define OK 1#define ERROR 0#define INSEASIBLE -1#define OVERFLOW -2typedef char ElemType;typedef int Status;typ...原创 2019-02-07 11:19:52 · 575 阅读 · 0 评论 -
数据结构第五章(堆、哈夫曼树、哈夫曼编码)
什么是堆?堆是按照一定顺序组织的完全二叉树 优先队列:特殊的“队列”,取出元素的顺序是依照元素的优先权(关键字)大小, 而不是元素进入队列的先后顺序。是否可以采用二叉树存储结构?可以,查找与删除的时间复杂度均为以2为底n的对数即log(2)n二叉搜索树?如果采用二叉树结构,应更关注插入还是删除?(删除) 树结点顺序怎么...原创 2019-02-15 16:01:00 · 847 阅读 · 0 评论 -
第三章(小白专场--二叉树同构的判断)
7-3 树的同构 (25 分)给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。 图1图2现给定两棵树,请你判断它们是否是同构的。 输入格式:输入给出2棵二叉树树的信息。对于每棵树,首...原创 2019-02-07 17:51:36 · 427 阅读 · 1 评论 -
数据结构(第二章--队列)
什么是队列?与栈一样,都是操作受限制的线性表,队列是先进先出的数据结构。队列顺序存储初始化表示:front=rear=0; front的值为队列中第一个元素的下标,rear的值为队列最后一个元素的后一个元素的下标。 任务:实现循环队列,实现队列链式存储(链表的头是队列的头,链表的尾是队列的尾)。 ...原创 2019-01-31 15:42:49 · 296 阅读 · 0 评论