软件设计师笔记8(数据结构与算法基础)

本文深入探讨数据结构包括数组、链表、树、图等,以及算法基础,如排序、查找、散列等,详细解析算法特性、复杂度及应用实例。适合计算机科学与技术专业学生和软件开发者阅读。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上午综合部分有内容考,下午也有,而且是最难的题

目录

标色为重点

  1. 数组与矩阵
  2. 线性表
  3. 广义表
  4. 树和二叉树
  5. 排序和查找
  6. 算法基础和常见算法

数组与矩阵

数组

在这里插入图片描述

稀疏矩阵

在这里插入图片描述

例题

在这里插入图片描述

线性表

线性表是线性结构的基本表现

两种数据结构:

  • 顺序存储结构:顺序表
  • 链式存储结构:链表

在这里插入图片描述

链表的基本操作

在这里插入图片描述

顺序存储和链式存储对比

在这里插入图片描述

队列与栈

在这里插入图片描述

广义表

广义表是n个表元素组成的有限序列,是线性表的推广。
通常用递归的形式进行定义,记做:LS=(a0,a1…,an)。

注:其中LS是表名,a是表元素,它可以是表(称做子表),也可以是数据元素(称为原子)。其中n是广义表的长度(也就是最外层包含的元素个数),n=0的广义表为空表;而递归定义的重数就是广义表的深度,直观地说,就是定义中所含括号的重数(原子的深度为0,空表的深度为1),可以从最外层括号嵌套了几重内括号来看。

基本运算:

  • 取表头head(Ls)和取表尾tail(Ls)。
  • 除了第一个元素是表头以外的都是表尾

例题

若有:LS1=(a,(b,c),(d,e))
head(LS1)=a
tail(LS1)=((b,c),(d,e))

现将其中的b字母取出操作?


共三步:取表尾,取表头,取表头

树与二叉树

在这里插入图片描述
在这里插入图片描述

二叉树遍历

在这里插入图片描述

  • 层次遍历
    12345678
  • 前序:根左右
    12457836
  • 中序:左根右
    42785136
  • 后序:左右根
    48752631

反向构造二叉树

在这里插入图片描述
最后形成的树:
在这里插入图片描述

树转换成二叉树

在这里插入图片描述

  • 兄弟节点就放右子树
  • 孩子节点就放左子树

查找二叉树(排序二叉树)

在这里插入图片描述

最优二叉树(哈夫曼树)

  • 路径乘以权值,只要求叶子,就是带权路径长度
    比如左一的就是:22+43+83+11=41

在这里插入图片描述

线索二叉树

在这里插入图片描述

平衡二叉树

在这里插入图片描述

图跟树最大的区别是,图有环路,树没有

完全图

  • 在无向图中,若每对顶点之间都有一条边相连,则称该图为完全图complete graph)
  • 在有向图中,若每对顶点之间都有二条有向边相互连接,则称该图为完全图。

邻接矩阵

在这里插入图片描述

邻接表

在这里插入图片描述

图的遍历

在这里插入图片描述
从邻接表来看:
在这里插入图片描述

拓扑排序

在这里插入图片描述

图的最小生成树

1.普利姆算法

在这里插入图片描述

2.克鲁斯卡尔算法

普里姆是选最近点,克鲁斯卡尔是选最短边
在这里插入图片描述

算法基础

算法特性

  • 有穷性:执行有穷步之后结束
  • 确定性:算法中每一条指令都必须有确切的含义,不能含糊不清,都有确定的唯一的结果
  • 输入(〉=0)
  • 输出(〉=1)
  • 有效性:算法的每个步骤都能有效执行并能得到确定的结果。例如a=0,b/a就无效

算法的复杂度

  • 时间复杂度是指程序运行从开始到结束所需要的时间。通常分析时间复杂度的方法是从算法中选取一种对于所研究的问题来说是基本运算的操作以该操作重复执行的次数作为算法的时间度量。一般来说,算法中原操作重复执行的次数是规模n的某个函数T(n)。由于许多情况下要精确计算T(n)是困难的,因此引入了渐进时间复杂度在数量上估计一个算法的执行时间。其定义如下:
    如果存在两个常数c和m,对于所有的n,当n≥m时有f(n)≤cg(n),则有f(n)=O(g(n))。也就是说,随着n的增大,f(n)渐进地不大于g(n)。例如,一个程序的实际执行时间为T(n)=3n3+2n2+n,则T(n)=O(n3)。

常见的对算法执行所需时间的度量:

O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n

  • 空间复杂度是指对一个算法在运行过程中临时占用存储空间大小的度量。一个算法的空间复杂度只考虑在运行过程中为局部变量分配的存储空间的大小.

查找

1.顺序查找

在这里插入图片描述

2.二分查找

在这里插入图片描述
在这里插入图片描述
除2后取整

  • 二分查找在查找成功时关键字的比较次数最多为|[1og2n]+1次。
  • 二分查找的时间复杂度为O(log2n)

散列表

在这里插入图片描述
在这里插入图片描述

排序

1.直接插入排序

在这里插入图片描述

2.希尔排序(shell)

在这里插入图片描述

3.直接选择排序

在这里插入图片描述

4.堆排序

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.冒泡排序

在这里插入图片描述

6.快速排序

在这里插入图片描述

7.归并排序

在这里插入图片描述

8.基数排序

在这里插入图片描述

排序的时间空间复杂度

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值