文章目录

  • 数据结构
    • 前言
      • 逻辑结构与物理结构
    • 算法
    • 线性表
      • 线性与非线性结构
      • 头指针与头结点
      • 链表为空判断
    • 栈和队列
      • 子串的个数
      • 二叉树遍历
      • 树和二叉树遍历对应关系
      • 树转成二叉树
      • 二叉树性质
      • 无向图
      • 关键路径
      • 拓扑排序
    • 查找
      • 二分查找
      • 分块查找
      • 二叉排序树
      • 平衡二叉树(AVL树)
      • 散列表查找
    • 排序
      • 七种排序算法的各种指标比较

数据结构

前言

逻辑结构与物理结构

逻辑结构:是指数据对象中数据元素之间的相互关系。

  • 集合结构:集合结构中的数据元素除了同属于一个集合外,它们之间没有其他关系。
  • 线性结构:线性结构中的数据元素是一对一的关系
  • 树形结构:树形结构中的数据元素之间存在一种一对多的层次关系
  • 图形结构:图形结构的数据元素时多对多的关系

物理结构:是指数据的逻辑结构在计算机中的存储形式

  • 顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据元素间的逻辑关系和物理关系是一致的。
  • 链式存储结构:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。

算法

线性表

线性与非线性结构

线性结构是一个有序数据元素的集合。常用的线性结构有:线性表,栈,队列,双队列,一维数组,串。

非线性结构,数学用语,其逻辑特征是一个结点元素可能有多个直接前趋和多个直接后继。常见的非线性结构有:二维数组,多维数组,广义表,树(二叉树等)。

传统文本(例如书籍中的文章和计算机的文本文件)都是线性结构,阅读是需要注意顺序阅读,而超文本则是一个非线性结构。在制作文本时,可将写作素材按内部联系划分成不同关系的单元,然后用制作工具将其组成一个网型结构。阅读时,不必按线性方式顺序往下读,而是有选择的阅读自己感兴趣的部分。

在超文本文件中,可以用一些单词,短语或图像作为连接点。这些连接点通常同其他颜色显示或加下划线来区分,这些形式的文件就成为超文本文件。通过非线性结构,可能实现页面任意跳转。

有一个以上根结点的数据结构一定是非线性结构。

头指针与头结点

头指针 头结点
头指针是指链表指向第一个结点的指针,若链表有头结点,则是指向头结点的指针 头结点是为了操作统一和方便设立的,放在第一元素的节点之前,其数据域一般无意义(也可存放链表长度)
头指针具有标识作用,所以长用头指针冠以链表的名字 有了头结点,对在第一元素的节点前插入节点和删除第一节点,其操作与其他节点的操作就统一了
无论链表表是否为空,头指针均不为空。头指针是链表的必要元素 头结点不一定是链表的必要元素

链表为空判断

循环链表与单链表的判断主要差异就在于循环判断条件上:

  • head->next = null , 单链表为空
  • head->next = head, 循环链表为空

栈和队列

栈:限定在表尾进行插入和删除的线性表

队列:只允许在一端进行插入操作,而在另一端进行删除操作的线性表

链栈与顺序栈相比,一个明显的优点是通常不会出现栈满的情况

循环队列满的条件是:(rear +1) % QueueSize == front

循环队列长度计算公式:(rear - front + QueueSize) % QueueSize

栈满的时候要考虑上溢的情况,栈空的时候要考虑下溢的情况。

子串的个数

串(string):是由零个或多个字符组成的有限序列,又名叫字符串。

子串:串中任意个连续的字符组成的子序列称为该串的子串,空串也属于子串。

  • n个字符构成的字符串,假设每个字符都不一样,则共有n(n+1)/2+1个字符串

    实例应用:若串S=′software′,其子串的数目是()

    解析:n(n+1)/2+1=8(8+1)/2+1=37

  • 串中字符出现重复:字符串’wwwpqqpcom’所有非空子串(两个子串如果内容相同则只算一个)个数是()

    答案:50
    解析:包含重复子串共:n(n+1)/2+1=10(10+1)/2+1=55,减去重复:2个w,1个ww,1个q,1个.,所以共55-5=50个

串的定位操作通常称为串的模式匹配

二叉树遍历

如果一个二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足所有的节点全部没有左子树或者所有的节点全部没有右子树,即二叉树的高度等于节点数。

树和二叉树遍历对应关系

二叉树 森林
先序遍历 先序遍历 先序遍历
后序遍历 中序遍历 中序遍历

树的先序对应二叉树的先序

树的后序对应二叉树的中序

树转成二叉树

加线:在所有的兄弟节点之间加一条线

去线:对树中每个结点,只保留它与第一个孩子节点的连线,删除它与其他孩子节点之间的连线。

层次调整:以树的根节点为轴心,将整颗树顺时针旋转一定的角度,使之结构层次分明。

任何一棵和树对应的二叉树,其右子树必定为空

二叉树性质

如果对一棵有n个节点的完全二叉树(其深度为[log2n]+1[log_2n]+1[log2​n]+1 )的节点按层序编号(从第 1 层到第$[log_2n]+1 $)层,每层从左到右),对任一节点 i(1≤i≤n)i \left( 1\leq i \leq n\right)i(1≤i≤n) 有:

  1. 如果 i = 1, 则节点 i 是二叉树的根, 无双亲;如果 i > 1,则其双亲是节点 [i/2]
  2. 如果 2i > n,则节点 i 无左孩子(节点 i 为 叶子节点);否则其左孩子是节点2i
  3. 如果2i + 1 > n, 则节点 i 无右孩子;否则其右孩子是节点 2i + 1

完全二叉树的最后一个结点的编号是1001,则它的父结点的编号为1001/2=500,则叶子结点个数为1001-500=501.

总结一下:完全二叉树的最后一个结点的编号是n,则它的父结点的编号为[n/2],则叶子结点个数为n-[n/2]。

无向图

一个有n个顶点的无向图最多有n(n−1)/2n(n-1)/2n(n−1)/2 条边

关键路径

在一个表示工程队的带权有向图中,用顶点表示事件,用有向边表示活动,用边上的权值表示活动的持续时间,这种有向图的边表示活动的网,我们成之为AOE网(Activity On Edge Network)

用一个有向图表示一个工程的各子工程及其相互关系,其中以顶点表示活动,狐表示活动之间的优先制约关系,称这种有向图为顶点表示活动的网,简称AOV网(Activity On Vertex network)。

我们把路径上各个活动所持续的时间之和称为路径长度,从原点到汇点具有最大长度的路径叫关键路径,在关键路径上的活动称为关键活动

拓扑排序

设有向图有 n 个顶点 e 条边,进行拓扑排序时总的时间复杂度为 O(n+e)O(n + e)O(n+e)

查找

二分查找

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。

根据顺序表二分法查找比较次数的计算公式:
a<log2n<b(a,b,n∈Z+)a<log_2n<b (a,b,n \in Z^+) a<log2​n<b(a,b,n∈Z+)
当顺序表有n个关键字时:

查找失败时,至少比较a次关键字;查找成功时,最多比较关键字次数是b。

如果顺序表记录数 n=97 ,log₂64<log₂97<log₂128,即6<log₂97<7,最大比较次数为7次。

分块查找

分块查找的平均查找长度不仅取决于数据集的总记录个数 n,还和每一块的记录个数 t 相关。

二叉排序树

二叉排序树(Binary Sort Tree),又称二叉查找树。它或者是一颗空树,或者是具有以下性质的二叉树。

  • 若它的左子树不空,则左子树上所有的节点的值均小于它的根结点的值;
  • 若它的右子树不空,则右子树上所有的节点的值均大于它的根结点的值;
  • ⑶ 左、右子树本身又各是一棵二叉排序树。 按中序遍历二叉排序树,所得到的中序遍历序列是一个递增有序序列

平衡二叉树(AVL树)

平衡二叉树(Height-Balanced Binary Search Tree),是一种二叉排序树,其中的每一个节点的左子树和右子树的高度差至多等于1。

我们将二叉树上节点的左子树深度减去右子树深度的值称为平衡因子BF(Balance Factor)

散列表查找

对于散列表长为m的散列函数,构造方法有:

  1. 除留余数法

Hash(key) = key mod p (p<=m)

p一般取小于m的最大质数(素数)

  1. 直接定址法

Hash(key)=a×key+b(a,b为常数)Hash(key) = a\times key + b \quad \left( a, b 为常数 \right) Hash(key)=a×key+b(a,b为常数)

  1. 数字分析法
  2. 平方取中法
  3. 折叠法
  4. 随机数法

Hash表的平均查找长度与处理冲突的方法和散列表的装填因子有关

  • 装填因子 = 填入表中的记录个数 / 散列表长度。

查找成功=查找次数/数据个数。

查找失败=查找次数/散列后的地址个数。

排序

七种排序算法的各种指标比较

排序方法 平均情况 最好情况 最坏情况 辅助空间 稳定性
冒泡排序 O(n2)O(n^{2})O(n2) O(n)O(n)O(n) O(n2)O(n^{2})O(n2) O(1) 稳定
简单选择排序 O(n2)O(n^{2})O(n2) O(n2)O(n^{2})O(n2) O(n2)O(n^{2})O(n2) O(1) 稳定
直接插入排序 O(n2)O(n^{2})O(n2) O(n)O(n)O(n) O(n2)O(n^{2})O(n2) O(1) 稳定
希尔排序 O(n logn)~O(n^2) O(n^1.3) O(n2)O(n^{2})O(n2) O(1) 不稳定
堆排序 O(n logn) O(n logn) O(n logn) O(1) 不稳定
归并排序 O(n logn) O(n logn) O(n logn) O(n) 稳定
快速排序 O(n logn) O(n logn) O(n2)O(n^{2})O(n2) O(logn)~O(n) 不稳定

数据结构期末复习笔记相关推荐

  1. 数据结构期末复习笔记(NEU版)

    数据结构期末复习笔记 绪论 数据结构的概念 数据结构的分类 数据结构研究的内容 算法的重要特性 算法的设计要求 题目汇总 线性表 栈和队列 栈 队列 题目 数组与广义表 树 二叉树 二叉树的遍历 线索 ...

  2. 电子科技大学操作系统期末复习笔记(二):进程与并发控制

    目录 前言 进程管理 进程基本知识 程序的顺序执行 前趋图 程序的并发执行 并发程序 进程的定义和特征 进程的特征和状态 操作系统内核 定义 功能 原语 原子操作的实现 操作系统控制结构 进程控制块P ...

  3. 数据结构期末复习(四)

    数据结构期末复习(四) 树的相关概念 节点的度:一个节点的子树数目成为节点的度.也就是一个节点连着几个子节点的意思. 叶子节点:没有子节点的节点. 树的度:Max{所有节点的度}. 深度:就是树的高度 ...

  4. 【期末复习笔记】知识产权法——著作权、专利法、商标权

    [期末复习笔记]知识产权法 著作权 著作权法不予以保护的客体 著作权的归属 著作权的内容 著作人身权 著作财产权 著作权的取得方式:自动取得 著作权的保护期限: 邻接权 表演者权 表演者义务 表演者权 ...

  5. 【Python数据分析与可视化】期末复习笔记整理(不挂科)

    [Python数据分析与可视化]期末复习笔记 1. 数据分析与可视化概述 对比 概念 常用工具 Python常用类库 Jupyter notebook中的常用快捷方式 2. Python编程基础 co ...

  6. RFID原理及应用期末复习笔记 | 1.RFID概述【完结✿✿ヽ(°▽°)ノ✿】

    系列索引:RFID原理及应用期末复习笔记 | 快速索引 RFID是博主大三下的一门专业课,因为疫情缩短学期进程提前结课,所以期末考试也来的更早,这里就简单记录一下自己复习时的一些笔记,也给后来的学弟学 ...

  7. 南邮部分期末复习笔记汇总@tou

    README 知识库链接:tou/njupt-cst-notes 这个知识库存放了部分我在 NJUPT-CST 专业就读期间的期末复习笔记,这一部分公开的语雀笔记是我众多笔记中总结的还算 OK 的,仅 ...

  8. 奇异矩阵能lu分解条件_矩阵分析-期末复习笔记(上)

    (复习笔记,可能有点乱.夹杂着乱七八糟的英文,因为要用英文考试.) (如果有误请一定要和我说!祝我final考个好成绩-) 目录: 特征值,特征向量,相似 (Eigenvalues, eigenvec ...

  9. 数理统计期末复习笔记(一)

    数理统计期末复习笔记 主要内容: 数据压缩,点估计,假设检验,区间检验 Reference: Statistical Inference, Casella&Berger Chapter 6 D ...

最新文章

  1. 链表中倒数第k个节点
  2. Redis+Nginx+设计模式+Spring全家桶+Dubbo阿里P8技术精选文档
  3. WebService using Spring throwed org.xml.sax.SAXException: Bad envelope tag: htm
  4. html图片加波浪滤镜,CSS滤镜wave属性(波形滤镜)
  5. 计算机网络探究一之利用双网卡主机共享上网
  6. 图解 | 线程的麻烦事儿,Actor能解决吗?
  7. 【JS】原生淘宝轮播图实现总结
  8. Mac终端建立替身 并置于桌面或Finder中
  9. 大型门户网站的可伸缩性架构设计
  10. 【QGIS入门实战精品教程】9.1:QGIS构建泰森多边形(Thiessen Polygon)实例精解
  11. Unity GPU Instancing的使用尝试
  12. 视频:如何把应用通过vmc部署到cloud foundry上
  13. Nginx如何配置静态文件过期时间
  14. 反射类 Method类的使用
  15. android 获取emui版本,华为手机为什么有EMUI版本和Android版本?
  16. 传奇登陆游戏黑屏错位以及登陆器配置和常见问题
  17. 机房收费系统个人重构—图(文档)
  18. 一个有趣的模型组合预测模型
  19. css圣杯模式的HTML代码,三种方式实现圣杯布局
  20. 汇编:动态画出一棵七彩圣诞树

热门文章

  1. SGU 131 贴地砖类型 状态压缩DP
  2. 无人值守的好帮手| 周界雷视声光报警柱工勘配置指导
  3. SWIFT推出快速、高性价比的小额跨境支付服务:SWIFT Go
  4. 【Linux】shell语法入门手册 语法大全
  5. 使用第三方推流工具OBS推流工具和FMLE推流工具
  6. 利用C语言for循环打印爱心
  7. 负债多少才算高?负债过高还能办贷款吗?
  8. iOS 应用程序内切换语言 中英文切换
  9. 鸿蒙2.0!用 JavaScript 开发鸿蒙应用
  10. Bert不完全手册7. 为Bert注入知识的力量 Baidu-ERNIE THU-ERNIE KBert