学习笔记
a656418zz
这个作者很懒,什么都没留下…
展开
-
【数据结构】十字链表和邻接多重表的构造图的方法(手动构造非代码)
【十字链表-用于有向图】定点表结点:data:数据内容firstin:以该顶点为尾的第一个弧结点(A→B)firstout:以该顶点为头的第一个弧结点(A→B)实际上对于选边没有一个特定的规则,所以firstin/out的结点可能不同边表结点:tailvex:尾域,表示弧尾。(一般来讲就是顶点表自己)headvex:头域,表示弧头。(如A→B,A尾tailvex,B为headve...原创 2019-10-29 17:26:35 · 377 阅读 · 0 评论 -
C语言程序设计 学习笔记 文件输入输出、二进制文件
概念性内容比较多,直接看视频吧unix下(我没用过unix所以就原封不动抄下来了)对于一个编译好的程序> xx.in 可以将scanf的数据保存进去> xx.out 可以将printf的数据保存进去用于查看对于<stdio.h>下,也有自带的文件输入输出函数...原创 2018-11-17 16:26:38 · 283 阅读 · 0 评论 -
C语言程序设计 学习笔记 可变数组(链表基础)
用C语言实现一个可以变大小的数组(动态数组)需求:1.当数据量不够的时候,它能自动扩张2.我能够随时看到其目前的size3.能够访问它的单元1.创建数组2.释放数组3.求数组目前大小4.读取指定位置5.inflate 膨胀 -> 扩张数组代码+笔记:#include <iostream>#include "array.h" #include <s...原创 2018-11-18 11:30:04 · 444 阅读 · 0 评论 -
C语言程序设计 学习笔记 链表
接可变数组但如果我们可以使用BLOCK,将其都拼接在一起,并不是用上面的方法复制粘贴。每一个BLOCK会有一个单元指向的是下一个BLOCK的地址,这样就不会有上述的问题了所以对于一个单元,它里面应该分成两部分:1.数据2.下一个单元的地址(指针)这样指向的下一个数据结构也应是如此。直到最后一个单元,保存的是数据,地址用一个标记标志它已经没有指向下一个地方了当然最开始,还需要一个指针...原创 2018-11-18 16:28:00 · 314 阅读 · 0 评论 -
【数据结构】树-二叉树的遍历
先序遍历先序遍历过程:1.访问根节点(输出其值)2.持续先序遍历其左子树,直到没有左子树后,退回上一节点3.先序遍历其右子树一次,再回到2不难看出这是类似走迷宫并且还有退回的一个方法,所以不难想到用递归来做。递归实现:每走到一个新的点就将其输出,否则退回上一层的函数中图例:从A开始,先输出A,再往左走,输出B,继续走输出D。D之后的D->Left == NULL,所...原创 2019-03-22 09:57:19 · 143 阅读 · 0 评论 -
【数据结构】树-平衡二叉树的调整(RR,LL,LR,RL)新增代码实现
平衡二叉树的定义:为空树或者它的左子树和右子树都是平衡二叉树,且左子树和右子树的高度差的绝对值不超过1如图,第三个就是错的,因为7的右子树高度为0,左子树高为2,BF(T)= 2不满足要求h=3、4、5类似,谨记:树的左右子树依然是平衡二叉树通过推算能得出:当一个结点数量为N组成的平衡二叉树,其高度能达到logn平衡二叉树的调整:RR旋转对于Mar,May组成的二叉树,然后准...原创 2019-04-09 15:43:51 · 8059 阅读 · 1 评论 -
【数据结构】图的遍历——深度优先搜索DFS、广度优先搜索BFS
深度优先搜索(Depth First Search)DFS给定一个图,里面有8个灯泡,给定一个起点,要求把里面的灯泡全部点亮,请问应该如何操作先给其标注1~8,然后1是起点(已点亮),接下来的步骤是:从1出发,1的连通点为3个:2、5、7,1可以向其中任意一点前进并开灯,假如向2走到了2点,2的连通点为:1、3,由于1已经点亮了并且3没点亮,因此可以向3走到了3点,3的连通点情况与2类...原创 2019-04-20 20:22:55 · 755 阅读 · 0 评论 -
【数据结构】树-堆
1.什么是堆背景:优先队列:特殊的“队列”,取出元素的顺序是依照元素的优先权(关键字)大小,而不是元素进入队列的先后顺序。堆:用完全二叉树进行存储,特点:任何一个结点的值都比其根节点大(小),如果是按照关键字大的来删除,那么直接删除根节点就可以了特性:1.结构性:用数组表示的完全二叉树2.有序性:任一节点的关键字是其子树所有节点的的最大值(或最小值)最大堆(MaxHeap),也称“大顶...原创 2019-04-16 20:06:46 · 328 阅读 · 0 评论 -
【数据结构】图-最短路径问题
最短路径问题的抽象·在网络中,求两个不同顶点之间的所有路径中,边的权值之和最小的那一条路径这条路径就是两点之间的最短路径(shortest path)第一个顶点为源点(source)最后一个顶点为终点(destination)问题分类:单源最短路径问题:从某固定源点出发,求其到所有其他顶点的最短路径。(有向)无权图(有向)有权图多源最短路径问题:求任意两顶点间的最短路径无权图的...原创 2019-05-19 17:21:55 · 5047 阅读 · 1 评论 -
【数据结构】树-哈夫曼树与哈弗曼编码
层层if判断就像是一棵一直往下的树,这种树叫做“判定树”。如果90分以上的人很多,那么想得到grade = 5的结论,在这之前还需要进行4次判断,有点麻烦,还不如直接把这个判断放到if()中,作为首选判断条件更好如果考虑到成绩分布能够计算出平均查找效率就是比例 × 第几次判断 = 3.15修改判定树能优化查找效率,因此可以通过修改判定树来优化查找效率。这就是哈夫曼树的思想A...原创 2019-05-20 16:56:09 · 497 阅读 · 0 评论 -
【数据结构】各种排序算法&各种排序算法的比较
冒泡排序(Bubble Sort):对于一串数字,如3 2 5 9 6 4 1从3的位置开始往后进行 如果被比较数比3小,那么那个数就“浮上去”,即与3进行交换,此时变成 2 3 5 9 6 4 1再从第二个位置开始,即3和5比,顺序正常第三个位置,5和9比,顺序正常第四个位置,9和6比,6比9小,所以6“浮上去”,此时变成2 3 5 6 9 4 1第五个位置,9和4比,4比9小,所...原创 2019-05-25 21:29:32 · 6845 阅读 · 1 评论 -
【数据结构】散列查找
部分copy散列查找by萝卜头LJW以及浙大数据结构视频学习后得出why为什么要用散列查找?what什么是散列查找?解决冲突有哪些方法?how如何评估查找?散列函数如何设计?为什么要用散列查找?顺序查找 时间复杂度 O(N)二分查找(前提有序) 时间复杂度 O(logN)二叉搜索树 时间复杂度 O(h),h 是树高,最好情况 h = logN,最差 h = N 。二叉平...原创 2019-05-28 11:39:51 · 1304 阅读 · 0 评论 -
【数据结构】串的模式匹配(KMP算法)
什么是串线性存储的一组数据特殊操作集:求串的长度比较两串是否相等两串相接求子串插入子串匹配子串删除子串匹配子串目标:给定一段文本string:s0s1……sn-1给定一个模式:pattern = p0p1 …… pm-1求 pattern 在 string 中出现的位置这里的pattern可能会很长,所以直接简单粗暴的那种匹配方式在这里不是特别合适因此可以写一个...原创 2019-05-28 21:26:18 · 426 阅读 · 1 评论 -
C语言程序设计 学习笔记 格式化输入输出
格式化输入:scanf:%[flag]type格式化输出:printf:%[flags][width][.prec][hIL]type对于flags,表示的是标志,可以使用的内容如下:举例事例:int main(){ printf("%9d\n",123); printf("%-9d\n",123); return 0;}输出结果是: 12312...原创 2018-11-14 15:29:15 · 842 阅读 · 1 评论 -
C语言程序设计 学习笔记 12.3 多个源代码文件、头文件、声明
我们经常在做“分而治之”的事情(多个.c文件):1.main()里的代码太长了适合分成几个函数2.一个源代码文件太长了适合分成几个文件3.两个独立的源代码文件不能编译成可执行的程序对于(1),我们可以举以下例子:有个主函数main.c,有另外一个函数max.c(求最大值)#include<stdio.h>int max(int a,int b);int main(){...原创 2018-11-14 14:17:29 · 1779 阅读 · 0 评论 -
C语言程序设计 学习笔记 结构、类型定义
结构体基本struct structname { //自行定义};//分号不要忘了指向结构的指针:struct date{ int month; int year; int day;} myday;date *p = &myday;//赋值:(*p).month = 2;//更简便的方式:p->month = 2;用例:指针参数struct poi...原创 2018-11-08 22:38:53 · 149 阅读 · 0 评论 -
C语言程序设计 学习笔记 指针
翁恺 C语言程序设计1.取地址运算scanf(&amp;amp;amp;amp;quot;%d&amp;amp;amp;amp;quot;,&amp;amp;amp;amp;amp;amp;i);里的&amp;amp;amp;amp;amp;amp;:获得变量的地址,它的操作数必须是变量查看地址:printf(&amp;amp;amp;amp;quot;%x&amp;amp;amp;amp;quot;,原创 2018-09-23 22:46:59 · 696 阅读 · 0 评论 -
选择排序,插入排序学习笔记
[算法教程] 几种经典排序的实现 @blibili正月点灯笼选择排序:对于一个乱序数组(size=n)1.寻找其中的最大(小)值2.放到最右边(和最后一位交换位置)3.再从原数组size=n-1同样寻找最大值(此时这个是整个数组第二大的值了(如果有两个相同最大值不影响))4.继续放到在size=n-1的最右处5.一直循环到size=1结束排序数据举例:3 7 4 2 6 1 (...原创 2018-10-23 18:54:20 · 107 阅读 · 0 评论 -
归并排序 学习笔记(第一次如此了解递归)
归并排序 @bilibili正月点灯笼首先先讲一下归并排序的基本操作方法给定一个数组,有两部分,两部分的数组都是已经排好序了的,如:arr[] {2,8,9,10,4,5,6,7};1.我们记该数组最左边的下标为L,最右边的为R,中间(若偶数就靠右)的为M有 L = 0 , R = 7 ,M = 42.以M为界将原数组分成两个有规律的数组left和rightleft[] {2,8,9...原创 2018-10-24 23:04:58 · 421 阅读 · 0 评论 -
零散知识点整理
善用ctrl+f三目运算符 / 条件运算符 / ?/ ? :/pos = (pos &gt; 20)? pos-10:pos+10等同于if(pos &gt; 20){ pos = pos - 10;}else{ pos = pos + 10;}原创 2018-10-27 15:18:35 · 212 阅读 · 0 评论 -
C语言程序设计 学习笔记 指针运算
C语言程序设计 指针运算一个指针加1=?用代码试验一下:#include&lt;stdio.h&gt;int main(){ char ac[] ={0,1,2,3,4,5,6,7,8,9}; char *p = ac; printf("p = %p\n",p); printf("p+1 = %p\n",p+1); return 0;}p = 000000000062F...原创 2018-10-27 16:06:30 · 233 阅读 · 0 评论 -
C语言程序设计 学习笔记 动态内存分配(malloc)
如果输入程序时,先告诉你个数,然后再输入,要记录每个数据(类似动态数组)C99之前应该怎么做呢?malloc()函数的作用就在此:int *a = (int*)malloc(n*sizeof(int));malloc()函数的作用是向内存申请一个n*sizeof(elementtype)的内存,并返回地址,申请过来的这个大小的内存,可以直接理解为新建了一个a[n]的数组使用malloc...原创 2018-10-27 17:11:25 · 786 阅读 · 0 评论 -
C语言程序设计 学习笔记 字符串(I)
字符数组:char word = ['h','e','l','l','o','w','o','r','l','d','!'];这是一个字符数组,它的单元是word[0] = h,word[1] = e,word[2] = l……但是这不是C语言的字符串,因此不能用字符串(接下来会讲)的方式计算。字符串应该是这样:char word = ['h','e','l','l','o','w',...原创 2018-10-30 22:36:51 · 309 阅读 · 0 评论 -
C语言程序设计 学习笔记 字符串(II)(字符串输入输出,字符串数组,程序参数)
字符串输入输出:char str[8];scanf("%s",&str);printf("%s",str);scanf表示读入一个单词(到空格、tab、回车为止)scanf是不安全的,因为这样不知道要读入的内容的长度,在一些情况中会出现问题:#include<stdio.h>void f(){ char s1[8]; char s2[8]; scanf("...原创 2018-11-03 22:46:57 · 2244 阅读 · 0 评论 -
C语言程序设计 学习笔记 字符串(III)(putchar,getchar)
putcharint putchar(int c);向标准输出写一个字符返回写了几个字符,EOF(-1)(End Of File)表示写失败getcharint getchar(void);从标准输入读入一个字符返回类型是int是为了返回EOF(-1)表示输入结束windows --> ctrl+cunix --> ctrl+d代码举例:#include<s...原创 2018-11-03 23:15:11 · 404 阅读 · 0 评论 -
ACM学习大纲
1 推荐题库• http://ace.delos.com/usaco/美国的OI 题库,如果是刚入门的新手,可以尝试先把它刷通,能够学到几乎全部的基础算法极其优化,全部的题解及标程还有题目翻译可以baidu 一个叫NOCOW 的网站。• http://livearchive.onlinejudge.org/上面有全部的赛区真题,绝大部分都可以提交,不适合当题库刷,不过在这里找题非常方便。...转载 2018-11-06 21:44:54 · 352 阅读 · 0 评论 -
#include<stack>使用方法简介
原博文:#include使用方法简介 by csdn: wardseptember栈的定义栈被实现为容器适配器,它是使用特定容器类的封装对象作为其基础容器的类,提供了一组特定的成员函数来访问其元素。 元素从特定容器的“后面”被推入/弹出,这被称为堆栈的顶部。成员函数Member functions(constructor)Construct stack (public member...转载 2018-11-04 10:42:51 · 511 阅读 · 0 评论 -
C语言程序设计 学习笔记 字符串(IV)(字符串函数,字符串搜索函数)
对于&lt;string.h&gt;库,有如下常用函数:strlenstrcmpstrcpystrcatstrchrstrstrstrlensize_t strlen(const char *s);返回s的字符串长度(不包括结尾的\0)代码实现:#include&lt;stdio.h&gt;#include&lt;string.h&gt;int main(int a...原创 2018-11-03 23:29:50 · 437 阅读 · 1 评论 -
C语言程序设计 学习笔记 宏定义
编译预处理指令#开头的是编译预处理指令它们不是C语言的成分,但是C语言程序离不开它们#define用来定义一个宏如#define PI 3.14159这样PI这个东西就是3.14159的值在编译过程中,计算机会把代码中出现的PI全部换成3.14159也可以有如下定义#define FORMAT "%f\n"那么,形如printf(FORMAT,2*PI*3.0);实际...原创 2018-11-10 23:49:50 · 366 阅读 · 0 评论 -
C语言程序设计 学习笔记 素数
翁恺 C语言程序设计中提到了一个新思路求素数方法,做个笔记在一串数字1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16……中,从2开始遍历,将2的倍数全部划去,因为这些数肯定是合数,再遍历到3,将3的倍数全部划去,以此类推例:2、3、4、5、6、7、8、9、10、11、12、132的倍数全部划去2、3、4 、5、6 、7、8 、9、10 、11、12 、13循...原创 2018-09-23 20:14:56 · 505 阅读 · 0 评论