关于我假期自学数据结构这件事
文章平均质量分 73
用于记录自学数据结构过程中的知识点。
学习笔记来自青岛大学王卓老师,非常感谢老师的视频教学。
参考:https://www.bilibili.com/video/BV1nJ411V7bd
_Puitar_
自学技术!
展开
-
第零章#0.1绪论:一些应该知道的东西
###基本概念和术语###数据:可输入计算机,能够被处理的各种符号集合。数据元素:数据的基本单位。数据项:组成数据元素的不可分割最小单位。数据对象:性质同的元素集合,是数据子集。以学生信息表为例。解释:整个表可以看作是一个数据;每一个人所在行就是一个人的全部信息,构成一个个人单位,是一个数据元素;姓名这一列,出生日期这一列,具有相同性质(都是一个人的称号,都是一个人的生日),这就是数据对象;而具体到每一个格子里的内容,就是数据项,这是表格的最小单位(不可再分)。...原创 2021-07-23 23:12:52 · 634 阅读 · 0 评论 -
第一章#1.1线性表的定义和顺序存储存储
数组定义数组静态分配 typedef struct { ElemType data[MaxSize]; int length; } SqList; //顺序表类型数组动态分配 typedef struct { ElemType* data; int length; } SqList; //顺序表类型 利用动态内存分配与静态分配等价原创 2021-07-23 23:33:50 · 769 阅读 · 0 评论 -
第一章#1.2线性表的链式表示和实现
###链式存储结构###用任意物理位置存储,存储单元可能恰好连续,但逻辑顺序和物理顺序就不一定相同了。在存储这一个元素的值还要存储下一个元素的地址。一个节点分成两个部分(数据域,指针域)节点:数据元素的存储映像。数据域+指针域。链表:n个结点由指针链连接在一起。它是线性表的链式存储映像。※链表类型:单链表:节点只有一个指针域的链表,称为单链表或线性链表。 双链表:结点有两个指针域的链表,一个用来存储上一结点地址,一个用存储下一结点的地址,还有一个数据域。 循环...原创 2021-07-24 18:16:21 · 1201 阅读 · 0 评论 -
第一章#1.3循环和双向链表
###循环链表###循环链表是一种头尾相接的链表(即:表中最后一个结点的指针域指向头结点,整一个链表形成一个环)。注意:循环链表无NULL指针,故涉及遍历操作时,其终止条件就不像非循环链表那样判断p或p->next是否为空,而是判断它们是否等于头指针。循环条件:p!=L或者p->next!=L由于尾指针满足r->next->next就是指向首元结点,作用相当于头指针。因此在实际使用过程中,更经常使用的是这种尾指针的循环链表,这样既可以从头遍历,也可以从尾.原创 2021-07-27 15:04:17 · 352 阅读 · 2 评论 -
第一章#1.4线性表的应用以及实际案例分析
###顺序表和链表的比较及如何选择###ps一般地,存储密度越大,存储空间地利用率就越高。显然,顺序表地存储密度为1(100%),而链表地存储密度小于1。###线性表的两个典型运用###1.线性表的合并 问题描述:假设利用两个线性表La和Lb分别表示两个集合A和B,现要求一个新的集合是两个并集 算法步骤:一次去除Lb中的每个元素,执行以下操作: 在La中查找该元素 如果找不到,则将其插入La的最后 void...原创 2021-07-27 17:57:39 · 823 阅读 · 0 评论 -
第二章#2.1栈和队列
###栈和队列区别于线性表的特点###栈和队列是只限定插入和删除操作只在端点栈只在队尾插入队尾删除,队列只在队尾插入对头删除栈——后进先出 数制转换 括号匹配 行编辑程序 迷宫求解 表达式求值 八皇后问题 函数调用 递归调用的实现 队列——前进先出 脱机打印输出 多用户系统用户排队分时循环使用CPU和主存 按用户优先级排队,每个优先级一个队列 实时控制系统,信号按接受顺序依原创 2021-08-04 19:48:55 · 293 阅读 · 0 评论 -
第三章#3.1串(字符串)
###串(string)###零个或任意字符组成的有限序列字串:串中任意连续字符组成的子序列(含空串)称为字串真字串是不包含自身的所有字串字符位置:字符在序列中的序号为该字符在字符串中位置字串位置:字串第一个字符在主串中的位置空格串:由一个或者多个空格组成的串,和空串不同串相等:当两个串的长度相等且对应位置上的字符都相同时,这两个串才是相等的所有的空串都是相等的###串案例的引入###病毒检测将人的DNA和人的DNA用字母表示,检测DNA中是否出现病毒DNA原创 2021-08-08 11:32:54 · 148 阅读 · 0 评论 -
第三章#3.2数组和广义表(较简单,可略)
###数组存储###数组是按一定格式排列起来的具有相同类型的数据元素这里的数组可以和c语言中的数组联系在一起一维数组:是线性结构,定长的线性表 例如:int num[5]={0,1,2,3,4};二维数组可以看成是一维数组,其中每一个元素又是一个一维数组;按照行看它有一个前趋和一个后继,按列看它也有一个前趋和一个后继,这就不是典型的只有一个前趋和一个后继的线性结构了,他是非线性结构,也可以看成线性结构的扩展 例如:int num[行数][列数]n维数组可以看成是一维数组,其中每个元素的类原创 2021-08-08 15:48:59 · 210 阅读 · 0 评论 -
第四章#4.1树型结构
###树定义###树(tree)是n个结点的有限集合若n=0,空树若n>0,它满足下面两个条件: 有且有一个特定的根(root)的结点 其余结点又可以分为m个互不相交的有限集合T1, T2, T3,...,其中每一个集合本身又是一棵树,称为子树 ###树的基本术语###结点:数据元素以及指向子树的分支根结点:非空树中没有前驱结点的结点结点的度:拥有子树的个数,拥有的后继结点的个数树的度:树内各个结点度的最大值叶子:终端结点,就是后面再没有分支了原创 2021-08-10 19:44:21 · 317 阅读 · 0 评论 -
第四章#4.2树和森林
树是一个根和若干棵不相交子树的集合森林是若干不相交树的集合树去掉根结点就变成了森林,森林加上根就变成树###树的存储结构###先前介绍了二叉树的存储结构,现在介绍一下一般树的存储结构双亲表示法实现:定义结构数组,用于存放结点,每个结点存放两个域 数据域:存放结点本身信息 双亲域:指示本结点的双亲结点在数组中的位置 注意到根结点的双亲位置标记为-1很显然这种结构是找双亲容易找孩子难//双亲表示法结点结构体类型typedef struct P.原创 2021-08-10 22:03:32 · 210 阅读 · 0 评论 -
第四章#4.3哈夫曼树以及案例介绍
###哈夫曼树###显然两种判断树的效率不同,所以哈夫曼树就是研究最优二叉树路径:从树的一个结点到另一个结点的分支构成了两个结点间的路径(简单来说就是两个结点之间的连线)结点的路径长度:两个结点间路径上的分支数树的路径长度:从根到每一个结点的路径长度之和,记作:TL结点数目相同的二叉树中,完全二叉树是路径最短的二叉树,反之不成立权(weight):将树中结点赋给一个有着某种含义的数值,则这个数值称为该节点的权结点的带权路径长度:从根结点到该结点之间的路径长度与该结点的权.原创 2021-08-11 11:50:52 · 821 阅读 · 0 评论 -
第五章#5.1图的介绍和存储结构
###图的定义和术语###图:G=(V, E) Graph=(Vertex, Edge)V:顶点(数据元素)的有穷非空集合E:边的有穷集合根据边是否有方向,分为有向图和无向图完全图:任意两个点都有一条边相连稀疏图:有很少边或弧(特指有方向的边)的图(e<nlogn)稠密图:有较多边或弧的图网:边/弧带权的图邻接:有边/弧相连的两个顶点之间的关系;存在(vi, vj),称为vi和vj互为邻接点;存在<vi, vj>,称为vi邻接到vj,vj邻接于vi;PS原创 2021-08-11 23:42:23 · 285 阅读 · 0 评论 -
第五章#5.2图的遍历以及应用
图的遍历:从连通图的一个顶点出发,沿着一些边访问遍历图中所有的顶点,且每个顶点仅访问一次,这就叫图的遍历,它是图的基本运算遍历实质:找到每个顶点的邻接点过程图的特点:图中可能存在回路,且图的任一顶点都可能与其他顶点相通,在访问完某个顶点之后可能会沿着某些边又回到访问过的顶点解决思路:设置辅助数组visited[n],用来记录访问过的顶点,未访问0,访问后1图常用遍历方法: 深度优先搜索(Depth_First Search——DFS) 广度优先搜索(Breadth_Fir..原创 2021-08-13 14:24:10 · 703 阅读 · 0 评论 -
第六章#6.1查找 之 线性表查找
查找表是一类型的数据元素构成的集合,由于集合中存在松散的关系,因此查找表是一种灵便的结构根据给定的某个值,在查找表中确定一个关键字等于给定值的数据元素关键字有两种: 主关键字 可唯一标识一个记录的关键字 次关键字 可以用来识别若干条记录的关键字 查找成功返回位置,没找到返回空指针查找表分为两类: 静态查找表:仅作查询(检索)操作的查找表,不改变表的结构 动态查找表:找到后,还要插入或者删除的查找表,会改变表原有的结构 方法一:顺序查找.原创 2021-08-13 16:03:58 · 187 阅读 · 0 评论 -
第六章#6.2查找 之 树表的查找
###二叉排序树###二叉排序树(Binary Sort Tree)又称为二叉搜索树、二叉查找树二叉排序树或是空树,或是满足如下性质的二叉树: (1)若其左子树非空,则左子树上所有结点的值均小于根结点的值 (2)若其右子树非空,则右子树上所有结点的值均大于等于根结点的值 (3)其左右子树本身又各是一棵二叉排序树//二叉排序树的存储typedef struct { KeyType key;//关键字项 InfoType otherinfo;//其他数据域} ...原创 2021-08-13 19:35:27 · 97 阅读 · 0 评论 -
第六章#6.3查找 之 散列表的查找
散列:记录的存储位置和关键字之间存在对应的关系对应关系——hash函数Loc(i)=H(keyi)就是对应根据关键字的值,用某个函数计算后得到它的位置Hash哈希:单词翻译为散列、杂凑,所以这就是散列表根据散列函数H(key)=k可以直接查找key=9,则访问H(9)=9号地址,若内容为9则成功;若查不到,则返回一个特殊值,如空指针或空记录 优点:查找效率非常高,O(1) 缺点:空间效率低 散列方法(杂凑法):选取某个函数,根据关键字直接计算存储位置,并按原创 2021-08-14 15:44:28 · 529 阅读 · 0 评论 -
第七章#7.1排序概述以及各种排序的比较
将杂乱无章的数据按照一定规律顺次排列起来,即,将无序序列排成一个有序序列(从小到大或从大到小)的运算如果参加排序的数据结点包括多个数据域,那么排序往往是针对其中某一个域而言排序方法的分类: 按数据存储介质:内部排序和外部排序 按比较器个数:串行排序和并行排序 按主要操作:比较排序和基数排序 按辅助空间:原地排序和非原地排序 按稳定性:稳定排序和非稳定排序 按自然性:自然排序和非自然排序 按照存储介质分(重点): 内部排序:数据原创 2021-08-15 21:23:19 · 173 阅读 · 0 评论 -
第七章#7.2插入排序
每一步都是将待排序的对象,按其关键码大小,插入到前面已经排好序的一组对象的适当位置上,直到全部插完;即,边插边排序,保证子序列中随时都是排好序的;类似打扑克,一边摸牌,一边整理牌根据找插入位置的方法分为: 顺序法定位插入位置——直接插入排序 二分法定位插入位置——二分插入排序 缩小增量多遍插入排序——希尔排序 ###直接插入排序###注意i指针之前的已经排好顺序,对应动画中左边黄色部分,当比较的时候如果当前元素比前边排好顺序的部分的最后一个,也就是.原创 2021-08-14 22:47:05 · 579 阅读 · 0 评论 -
第七章#7.3交换排序
两两比较,如果发生逆序则交换,直到所有记录都排好序为止常见的交换排序有两种: 冒泡排序 O(n2) 快速排序 O(nlog2n) ###冒泡排序###每趟两两比较,前小后大 有n个元素排序,则要冒泡n-1趟 每一趟冒泡都会把当前最重最大的沉到队尾 第一趟最大的沉到队尾,第二趟次大的沉到倒数第二个...,以此类推 第m趟要两两比较n-m趟,可以举例找找规律 //冒泡排序算法void bubble_sort(SqList &am原创 2021-08-15 11:41:26 · 93 阅读 · 0 评论 -
第七章#7.4选择排序
###简单选择排序###在待排序的数据中选出最小或最大放在最终位置,类似于暴力打擂台 首先通过n-1次比较,找出最小元素,把它和第一个记录交换 再通过n-2次记录从剩余的n-1个记录中找出次小的元素,把它和第二小的记录交换 重复上述操作,共进行n-1趟排序后,排序结束 //简单选择排序算法void SeletSort(SqList &K) { for (i=1; i<length; i++) { k=i;//用k来记录最小值原创 2021-08-15 16:02:54 · 105 阅读 · 0 评论 -
第七章#7.5归并排序
将两个或两个以上的有序子序列归并成一个有序序列 在内部排序中,通常采用的是2-路归并排序 即:将两个位置相邻的有序子序列R[l...m]和R[m+1...n]归并为一个有序序列R[l...n] 上面这棵树称为归并树,需要归并的数目等于树的高度,即roof(log2n)趟用两个指针分别遍历两个数组,把较小的加入新数组即可,这样就把两个有序的数组归并成一个有序的数组了//归并排序算法#include <bits/stdc++....原创 2021-08-15 17:41:51 · 103 阅读 · 0 评论 -
第七章#7.6基数排序
基本思想:分配+收集也叫桶排序或箱排序设置若干个箱子,将关键字为k的记录放入第k个箱子,然后再按序号将非空的连接基数排序:数字是有范围的,均由0~9这十个数字组成,则只需设置,十个箱子,相继按个、十、百...进行排序...原创 2021-08-15 22:38:48 · 116 阅读 · 0 评论