期末数据结构复习的一点笔记

举报
小哈里 发表于 2022/05/10 23:12:21 2022/05/10
【摘要】 选择 2*10 填空 1*20 主要形式为概念题和计算题 算法应用题 二叉树序遍历、哈夫曼树、最短路、最小生成树、拓扑序、关键路径 画图解决问题+概述算法思路+复杂度分析 程序填空题 二叉树序遍历、...
选择 2*10
填空 1*20
主要形式为概念题和计算题

算法应用题 
二叉树序遍历、哈夫曼树、最短路、最小生成树、拓扑序、关键路径
画图解决问题+概述算法思路+复杂度分析

程序填空题
二叉树序遍历、拓扑排序、堆排序

暂未包含:
程序阅读&程序设计

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

1、绪论

  • 数据,对客观事物的符号表示,图像声音等。

    数据元素是数据的基本单位,如学生记录。

    数据项是不可分割的最小单位,如姓名学号。

    数据对象是具有相同性质的数据元素的集合

    数据结构是互相之间存在关系的数据元素的集合。数据结构={D、R}构成。

    数据结构三要素:逻辑结构、存储结构、数据运算 (罗村树)

  • 逻辑结构分4类:线性,树,图,集合。

    逻辑结构包括线性(线性表、栈、队列)和非线性(树、图、集合)结构。线性结构的特点:所有成员处于一个序列,有且仅有一个直接前驱和后继。

    存储结构包括顺序、链式、索引、散列存储。 (顺联锁伞)

  • 算法的五个特征:有穷性、确定性、可行性、输入、输出 (有缺课出入)

2、线性表、栈和队列、串

线性表

按照存储结构的不同,分为顺序存储和链式存储分为2类。

1、顺序表(vector)
定义:由相同类型的数据元素构成。 每个元素有且仅有一个前驱和后继。
特点:由一组地址连续的存储单元依次存储。

2、链表
单链表:一个指针指向后继节点。
双链表:两个指针指向前驱和后继节点。
循环链表:没有指向null,判空条件为next指针等于头指针。



  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

栈和队列

操作受限的线性表

1、栈
后进先出,可以顺序和链式存储。
共享栈,即对顶栈。

2、队列
先进先出,可以顺序和链式存储。
循环队列:fr==ed


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

有多个字符组成的有限序列。
串是一种特殊的线性表,特殊性体现在数据元素可以是字符。

1、模式匹配算法:
简单匹配,求子串在主串中的位置
改进匹配:KMP算法及优化

2、矩阵的压缩存储:
对称矩阵,上下三角矩阵等
对称矩阵,下三角放入一位数组 B[n(n+1)/2]中,Aij对应i(i-1)/2+j-1或者代换aij=aji
上三角矩阵(含常量c),n(n+1)/2+1。aij=(n+n-i+2)(i-1)/2+(j-i)


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

3、树与二叉树

树的基本概念(选择题)

  • 节点的度:节点的孩子个数。 树的度:树中节点的最大度数。

    树中节点数 = 总度数+1(重要)

    总度数 = 边数的2倍。 (重要)

  • 树的深度是从上往下的,高度是从下往上的,值都一样。

    度为m的树中,第i层上最多有m^i-1个节点。

    高度为h的m叉树中,最多有(m^h-1)/(m-1)个节点

  • 有序树左右节点无法互换。

二叉树概念(选择题):

  • 父节点编号为i/2。

  • 叶子节点个数 = 度为2的节点数+1,即n0=n2+1

    证明, 因为n = n1+2*n2+1, 且n=n0+n1+n2。

  • 第k层有2^k-1个节点。

  • 存储方式

    顺序存储:构造成完全二叉树,用0填空,层次存入数组。

    链式存储:指向左右孩子指针。

  • 遍历:先序,中序,后序,层次(大题)

  • 树转二叉树:在兄弟节点间加跟线,根节点只保留第一个孩子的连线。

    森林转二叉树,每棵树都先转二叉树,然后兄弟节点连线,保留第一跟,顺时针转45度。

几种特殊的树(大题)

  • 二叉排序树,左子树<根节点<右子树。

    中序遍历为从小到大排序。

  • 哈夫曼树

    节点带权路径长度,为任意结点到根的总和。

    树的带权路径长度,为所有叶节点的带权路径长度之和。

4、图论

图的基本概念(选择题)

  • 无向完全图边数 = n*(n-1)/2, 有向图不需要除2。有向带权图又称为网。

    度数总和 = 边数的两倍。

  • 存储结构

    邻接矩阵, 邻接表,十字链表,邻接多重表。判断条件。

  • 图的遍历

    DFS,BFS,求遍历序列。 一次dfs,连通图。

图的应用(大题)

  • 最小生成树

    Prim:去掉所有的边,任选一个顶点。选点(与当前点集最近,不构成回路)。重复直到联通即可。

    Kruskal:去掉所有的边。 选边(边权最小,不构成回路)。重复直到图联通。

  • 最短路

    Dijkstra:将点集分为在最短路中的和不在的。每次去不在的中找距离最近的加入最短路加入最短路,并用其去松弛其余边。

  • 拓扑排序

    AOV网,顶点表示活动,边表示活动顺序。

    每次从AOV网中选择一个没有前驱的顶点输出,并删除该顶点和所有以它为起点的有向边。

  • 关键路径

    AOE网,顶点表示事件,有向边表示活动,边上权值表示活动开销。

    关键路径:从开始点到结束点的所有路径中,具有最大路径长度的路径。关键活动为关键路径上的活动,即有向边。

    事件vk的最早发生时间为最大前驱。 ve(k) = MAX{ve(j)+weight(vj,vk)};,vj为前驱。

    事件vk的最迟发生时间为最小前驱。vl(k) = MIN{vl(j)-weight(vj,vk)};,vj为前驱。

    活动的最早开始时间e(i) = 为起点的最早发生时间

    活动的最晚开始时间l(i) = 终点的最迟发生事件 — 活动所需时间。

    求关键路径:求出所有点的最早开始时间和最晚发生时间。再求出所有活动的最早和最晚发生时间。 额差d()=l()-e()。 d()=0的为关键路径。

5、查找与排序

查找的考点

  • 查找

    查找表(查找结构):用于查找的数据集合。

    关键字:数据元素中某个数据项的值,可以标识一个数据元素。主关键字可以唯一标识。

    平均查找长度:所有查找过程中进行关键字比较次数的平均值 A S L = ∑ i = 1 n P i C i ASL=\sum_{i=1}^nP_iC_i ASL=i=1nPiCi

    Pi为查找第i个元素的概率(一般每个元素都相等,即1/n),Ci为找到第i个元素需要的比较次数

  • 顺序查找的平均查找长度为 :成功 = ∑ i = 1 n 1 n ( n − i + 1 ) = n + 1 2 \sum_{i=1}^n\frac{1}{n}(n-i+1) = \frac{n+1}{2} i=1nn1(ni+1)=2n+1, 失败 = n+1。

    折半查找的平均查找长度为:成功 = n + 1 n l o g 2 ( n + 1 ) − 1 \frac{n+1}{n}log_2(n+1)-1 nn+1log2(n+1)1

    折半查找比较次数,可以画出判定树,看路过几个节点。

  • 散列表

    一种散列存储方法。

    散列函数Hash(key) = Addr。把两个不同关键词映射到同一地址称为同义词。

    (1)直接定址法: H(key) = a*key+b。(2)除留余数法: H(key) = key%p。

    散列冲突的处理方法 & 构造散列表(大题)

    (1)开放定址法:线性探测法di=0,1,2。平方探测法di=0^2,。再散列法di=hash2(key)

    查找不成功的平均查找长度 = 查找次数(1+13+12+。。2) / 散列后的地址个数(13)=7

    (2)拉链法: 存放到线性链表中。 ^符号表示后继指针为空。

    散列表的查找长度取决于3个因素:散列函数,冲突处理方法,装填因子

    装填因子a = 表中记录数n / 散列表长度m。 a越大,记录越满,冲突可能性越大。

排序的考点:

  • 排序的概念

    稳定性, 相对位置保持不变。

    内部排序:元素全部在内存中。基于比较和移动。外部排序需要外存。

  • 插入排序

    直接插入排序:假设已经排好序,插入即可。

    希尔排序:把相隔某个增量的记录组成一个子表,对各个子表进行直接插入排序。整体基本有序后,整体直接插入。

    空间O(1),时间不确定,不稳定。一般初始是稳定的,优化后不稳定。

    e.g,取增量d=5,组成多个子表,各排一次。再取d=3,再排一次。最后取增量d=1,即整体插入排序。

  • 交换排序

    冒泡排序。优化后快速排序

  • 选择排序:

    简单选择排序。优化后堆排序

    堆指的是:根节点比左右节点小或大的二叉树。

    构造大根堆:默认序列是二叉树。

  • 归并排序

  • 基数排序(基于关键字的各位大小)

    先分配:先按照个位进行分类,构造链表。

    再收集:按照顺序写到一起。

    以此类推,操作十位和百位,最后就有序了。

    给生日排序,基数排序是比较快的。

文章来源: gwj1314.blog.csdn.net,作者:小哈里,版权归原作者所有,如需转载,请联系作者。

原文链接:gwj1314.blog.csdn.net/article/details/122386955

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。