
笔记
文章平均质量分 92
钩钩剋
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
二叉树
二叉树的定义与性质 定义 二叉树是n个结点的有限集合,该集合或者为空集,或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。 如上图就是一个二叉树。 特点 每个结点最多有两棵子树,所以二叉树中不存在度大于2的结点。 左子树和右子树是有顺序的,次序不能任意颠倒。 即使树中某结点只有一颗子树,也要区分它是左子树还是右子树。 五种基本形态 空二叉树 只有一个根节点 根结...原创 2020-04-19 15:15:44 · 286 阅读 · 0 评论 -
数据结构--树
树的定义与基本使用 树的定义 我们生活中会了解到许多树,门前的核桃树,松树等,我们这里要讨论另一种在数据结构例定义的树。 树是n个结点的有限集。n=0时称为空树。在任意一颗非空树中:有且仅有一个特定的成为根的结点;当n>1时,其余结点可分为m个互不相交的有限集T1、T2、……、Tm,其中每一个集合本身又是一棵树,并且称为根的子树。 注:1.n>0时根结点是唯一的,不可能存在多个根节点...原创 2020-04-10 22:48:15 · 199 阅读 · 0 评论 -
数据结构--线性表
线性表的定义与基本使用 定义 线性表是一个序列,元素之间是有序列的,若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他每个元素都有且只有一个前驱和后继。如果一个元素有两个前驱或后继,就不算是有序排列。并且线性表是有限的,无限的数列,只存在于数学的概念中。 若将线性表记为(a1,…,ai-1,ai,ai+1,…,an),则表中ai-1是ai的前驱,ai+1是ai的后继,并且都是唯一的。线性...原创 2020-04-02 16:33:19 · 418 阅读 · 0 评论 -
最小生成树
图的最小生成树 例. (注:以上图片截自《啊哈!算法》) 上题就是图的最小生成树的最简单的一个例子,输入数据为n,m,n是路口的个数,m代表路的个数,接下来m行,代表一个路口到另一个路口的路径,并且可以看出是无向图。 既然是要总长度最小,所以我们这里先选择最小的边,然后选择次小边,直到选择n-1条边(因为n-1条边足够连接所有路口)。 这里我们需要用到结构体存储每一条边。 struct edge{...原创 2020-03-31 13:01:51 · 155 阅读 · 0 评论 -
最短路径
求最短路径的几种算法 弗洛伊德(暴力) 此算法同冒泡排序相似,代码简单但时间复杂度高。 如上图(选自《啊哈!算法》),数字代表城市,箭头代表城市之间的距离,并且是单向箭头求各个城市之间的最短路径。 我们可以假设现在允许通过城市1,那么城市3到城市2的距离就变成9,以此类推。 代码实现: for(j=1;j<=n;j++) { for(k=1;k<=n;k++) { ...原创 2020-02-19 20:01:53 · 389 阅读 · 0 评论 -
图的遍历
图的遍历 图的遍历主要是由深搜和广搜来完成的,基本上没什么难点。 例1.第一行输入两个数字n和m,n表示n个数,m表示n个数之间有m条连线;接下来m行每行有两个数,代表这两个数之间的连线,遍历这张图,每个数出现一次。 例2.第一行输入两个数字n和m,n表示n个数,m表示n个数之间有m条单向连线;接下来m行每行有三个数,第三个数代表前两个数之间的连线长度,输出由1到n的最短步数。 话不多说,上代码:...原创 2020-02-18 14:35:52 · 221 阅读 · 0 评论 -
广度搜索
广度搜索的基本使用方法 广度搜索不同于深度搜索,是一种一步一步进行的过程,每一个点只记录一遍。需要用到队列记录每一步可以走到的位置,找到目标位置输出步数即可。 用到的知识:结构体、队列 如图 首先我们需要定义一个结构体来存储每个遍历到的点和步数 struct node{ int x; int y; int s; }; 广搜不会用到递归,所以可以直接在主函数里写,这里需要定义一个结构体队列...原创 2020-02-14 15:18:29 · 392 阅读 · 0 评论 -
深度优先搜索
深度优先搜索的基础用法 深搜是一种不撞南墙不回头的算法,即是有序的尝试每一种可能的情况。 用到的知识:递归 先来看一个全排列的例子。 例1.输出1~n的全排列并计算排列总和。 很明显,暴力枚举也可以做,但时间复杂度肯定过高,深搜可以解决这种问题。 我们假设有九个格子,手上有九张扑克牌,因此我们需要两个全局数组变量来记录格子里的数和手上还剩什么牌,还需要两个全局变量保存n和排列总数。 int a[1...原创 2020-02-09 22:17:15 · 161 阅读 · 0 评论 -
枚举
枚举的基础使用 枚举的基本思想就是有序的去尝试每一种可能。 (若有错误,还请大佬指正) 例1._ _ + _ = _ _ 在每一条横线上边填入正确的数使等式成立,并且1~9每个数均只出现一次 1.创建两个数组及三个变量用来遍历和计数 int i,sum,t; int a[11],b[11]; 2.遍历 for(a[1]=1;a[1]<=9;a[1]++) for(a[2]=1;a[2]&...原创 2020-02-07 18:16:16 · 175 阅读 · 0 评论 -
栈
用栈判断回文的基础用法 本文是用栈判断回文字符串的基本解法解读。 栈是一种后进后出的数据结构,类似于羽毛球筒,最后装进去的是第一个被取出来使用。 例:给出一个字符串,判断其是否回文。 1.读取字符串并求出长度及中点(回文必须中间对称) char a[101]; gets(a); len=strlen(a); mid=len/2; 2.创建一个栈并将mid之前的字符存入栈 int i,top=0; ...原创 2020-02-06 16:42:41 · 109 阅读 · 0 评论 -
队列
队列的用法示例 以下为使用结构体实现队列的操作解决问题的一个示例(如有错误,还请大佬们指正): 例.给出一串数字,首先将第 1个数删除,紧接着将第 2个数放到 这串数的末尾,再将第 3个数删除并将第 4个数放到这串数的末尾,再将第 5个数删除…… 直到剩下后一个数,将后一个数也删除。按照刚才删除的顺序,把这些删除的数连在一起输出。 1.首先创建一个结构体存储一个数组以及两个变量 struct qu...原创 2020-02-01 17:24:55 · 176 阅读 · 0 评论 -
快速排序
快速排序的基本用法 以下是本人对快速排序的一些看法(如有错误,还请大佬们指正): 快速排序申请的空间比桶排序要小,比冒泡排序的速度快,用法很广泛,以下是快速排序的基本使用方法: 1.快排是一步一步将每一个基准数归位的过程 2.快速排序需要用到递归,创建函数是一个比较方便的方法,并且创建两个全局变量在子函数中用到 int a[101],n;//定义全局变量,这两个变量需要在子函数中使用 vo...原创 2020-02-01 16:05:39 · 217 阅读 · 0 评论 -
冒泡排序
冒泡排序的基本用法 冒泡排序申请的空间比桶排序要小,但不如桶排序快,以下是冒泡排序的基本使用方法: 1.创建三个中间变量及一个数组并给其赋值 int i,m,j; int a[11]={0,3,6,2,5,66,9,3,1,100}; 2.由下标从小到大遍历,依次将最小的放在前面 for(i=0;i<9;i++) { for(j=i+1;j<10;j++) { ...原创 2020-02-01 13:47:03 · 128 阅读 · 0 评论 -
桶排序
桶排序的简单使用 桶排序算是所有排序里最快速的排序,但是申请空间一般比其他排序要大得多,一下是桶排序的基本使用方法: 1.创建两个中间变量及两个数组并给其一个赋值并给另外一个赋0 int i,j; int a[10]={0,2,4,1,4,6,7,9,5,44}; int b[100]={0}; 2.遍历a数组中的值,并将其做b数组的下标+1 for(i=0;i<10;i++) {...原创 2020-02-01 13:31:32 · 103 阅读 · 0 评论 -
链表的创建
链表的创建及其增删查改 链表 链表的使用是在结构体和指针的基础上实现的 创建链表的过程需要用到malloc()函数和free()函数 定义结构体 struct Node { int data; struct Node *next; }; 创建函数 struct Node *Creat() //创建函数 { struct Node *Head,*p1,*p2; //定义头节点及中间变量 ...原创 2019-12-22 16:15:43 · 180 阅读 · 0 评论