软件设计师——【笔记】7数据结构与算法基础

一、数组与矩阵

1、数组
  • 存储地址的计算(按行、列存储)

i一般从0开始计,len取决于每一个数组元素占用的字节数。

不用记以上公式,其实就是a+数组元素所在单元格序号x字节数

如上题,在5行5列数组中(各元素占2字节),a[2] [3 ]即a+13x2;偏移量13为从0到a[2] [3 ]的数组元素

2、稀疏矩阵

数据中大部分数据为0,用稀疏矩阵能省空间

例题:

软件设计师——【笔记】7数据结构与算法基础_第1张图片

记公式难,应对考试快捷法:代入法,随便代几个数排除错误(正确的 不一定正确,错的一定错)

此题,代A0,0可排除BC,代A1,1可排除D

二、数据结构的定义

  • 著名数据结构:栈和队列(必考)

软件设计师——【笔记】7数据结构与算法基础_第2张图片

1、线性表(线性结构的基本表现)

软件设计师——【笔记】7数据结构与算法基础_第3张图片
软件设计师——【笔记】7数据结构与算法基础_第4张图片

  • 链表的基本操作(一般不考到双链表的难度)

软件设计师——【笔记】7数据结构与算法基础_第5张图片

  • 顺序存储与链式存储的对比
    软件设计师——【笔记】7数据结构与算法基础_第6张图片
栈和队列

软件设计师——【笔记】7数据结构与算法基础_第7张图片

循环队列队满和队空都是head,tail指向统一节点,两种解决方案:1.记录队满还是队空(麻烦);2.空间中少存一个元素(更常用)

栈和队列结合例题:
软件设计师——【笔记】7数据结构与算法基础_第8张图片

三、广义表

(了解基本概念和操作)

四、树与二叉树

(每次必考)

1、概念:

软件设计师——【笔记】7数据结构与算法基础_第9张图片

结点的度: 每个结点的度等于其孩子节点的个数,如①结点的度为2(②、③)

树的度:树的度为所有结点度数最高的,上题树的度是2

叶子结点:没有孩子结点的结点,如⑦、⑧

分支结点:有分支的结点

内部结点:非叶子结点且非根结点的结点(夹在中间的)

父结点:父结点和子结点是相对的概念,如②是④父结点,④是②的子结点,但②又是①的子结点

子结点:

兄弟节点:同一父结点

层次:把树分为一层一层

2、二叉树中几种特殊的二叉树:

满二叉树与完全二叉树
软件设计师——【笔记】7数据结构与算法基础_第10张图片

满二叉树:整棵树没有缺失的部分

完全二叉树:除了最底下一层,都是满的,而且底下从左到右排,缺的是右边的(不存在中间缺,右边还有)

3、遍历二叉树

层次遍历:一层一层,从左到右

前中后遍历是指访问根节点的先后

软件设计师——【笔记】7数据结构与算法基础_第11张图片

前序遍历:根左右; 中序遍历:左根右; 后序遍历:左右根

4、反向构造二叉树

知道遍历序列还原二叉树

有前序中序,或中序后序都能推出,但只有前序后序不能推出

软件设计师——【笔记】7数据结构与算法基础_第12张图片

5、数转二叉树

(左孩右兄)
软件设计师——【笔记】7数据结构与算法基础_第13张图片

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

也是一种比较特殊的二叉树

7、最优二叉树(哈夫曼树)

工具树,用于哈夫曼编码

树的路径长度:树中一个结点到另一个结点之间的分支(累加起来的长度),如15到8路径长度为3

权:某个叶子节点中字符出现的频度(结点子树在整个树中所占的比例.)

带权路径长度(树的代价):路径长度×权 (如15到2:2×2)

构造一棵哈夫曼树的理念:为让其总的带权路径长最短,如上例第一课数为40,第二棵为25.

8、线索二叉树

二叉树的基础上加虚线把很多节点串起来(对于有空子节点的结点而言),方便遍历
软件设计师——【笔记】7数据结构与算法基础_第14张图片

前序线索二叉树:根据前序遍历的序列,在结点的前后结点分别为其前继和后继(如下图示例)

中序后序同理

软件设计师——【笔记】7数据结构与算法基础_第15张图片

9、平衡二叉树

因为越平衡查找效率越高
软件设计师——【笔记】7数据结构与算法基础_第16张图片

平衡度:左子树-右子树 (如上例中结点5,为1-0=1)

不平衡二叉树如何调整:思路为对折,把位于不平衡的结点放在比较中间或者直接作为根节点。

五、图

(了解基本概念、皮毛)

树和图最大区别,树不形成环路

1、概念

软件设计师——【笔记】7数据结构与算法基础_第17张图片

2、图的存储主要有两种

①邻接矩阵
软件设计师——【笔记】7数据结构与算法基础_第18张图片

无向图的邻接矩阵有对称性(对角)

  • ②领接表

软件设计师——【笔记】7数据结构与算法基础_第19张图片

3、图的遍历

一个纵向一个横向
软件设计师——【笔记】7数据结构与算法基础_第20张图片

按领接的顺序遍历,广度优先:0(0,4,3,1)其中4又有0 (6,1,0)但6,1都访问过了,即4(6)
软件设计师——【笔记】7数据结构与算法基础_第21张图片

4、图——拓扑排序

可表示事件的先后执行顺序
软件设计师——【笔记】7数据结构与算法基础_第22张图片

都由0开始(0不受约束) 选择题(哪个不是拓扑排序)

5、图的最小生成树

①普里姆算法

把图的线(剩n-1条,n为点数)去掉留下若干条(留下来的边权值较小),然后连起来
软件设计师——【笔记】7数据结构与算法基础_第23张图片

如上题,留与A相连权值最小的B;与B权值相连的线和与A相连的线(除AB线外,已入选)权值最小的AE(200);与A、B、E相连的…;所有点都有线相连时即为最小生成树。

相同权值时,考虑其是否可能形成环路,形成环路的不相连

②克鲁斯卡尔算法(更简单)
软件设计师——【笔记】7数据结构与算法基础_第24张图片

选5条最短的边

六、排序与查找

  • 查找
1、顺序查找

逐个比对

软件设计师——【笔记】7数据结构与算法基础_第25张图片从头到尾一个个对比

2、二分查找

前提:查找的关键字的序列为有序排列(升/降序)

列题:
软件设计师——【笔记】7数据结构与算法基础_第26张图片

查找范围内未比较过的最大最小的下标的和的中间值,下标中间值取整(不是四舍五入,是直接去小数)
软件设计师——【笔记】7数据结构与算法基础_第27张图片
在这里插入图片描述

3、查找—散列表

散列函数:key%p(key题中关键码);冲突时两种√√处理办法:线性探测法一直往下走;

  • 排序(每次必考,上下午都可能考)

软件设计师——【笔记】7数据结构与算法基础_第28张图片

1、直接插入排序

即一个和全部对比(低配版冒泡)

软件设计师——【笔记】7数据结构与算法基础_第29张图片

2、(shell)希尔排序

分组,组内排序(顺序不对的交换位置);最后距离为1,即全部为1组了,经过前面的排序已经基本有序了,相比直接排序挪动的次数减少。

3、直接选择排序

选择未选择过的最小的依次交换在前面

软件设计师——【笔记】7数据结构与算法基础_第30张图片

4、堆排序

(最复杂)

  • 概念
    软件设计师——【笔记】7数据结构与算法基础_第31张图片

  • 堆排序基本操作

思想:建立堆,取走堆顶,重建堆,取走堆顶,直到全部取完即完成排序(比直接排序选择高效)

适合于对一部分数据排序的情况,每一轮会选出一个

1.初建堆:先按完全二叉树把所有结点排成树,再调整(从最后一个非叶子结点开始调整)
软件设计师——【笔记】7数据结构与算法基础_第32张图片

2.取堆顶,重建堆(把最后的结点补在堆顶,再调)过程,

5、冒泡排序

思想概念:

软件设计师——【笔记】7数据结构与算法基础_第33张图片

6、快速排序

定一个数为基准,然后其他数跟其对比(如小的在其左,大的在其由,踢皮球的方式),把数据分为两组,两组中有继续分…

7、归并排序法

8、基数排序

(较少考)

拆分位数排序,个十百…

各排序的复杂度及稳定性

(常考)

软件设计师——【笔记】7数据结构与算法基础_第34张图片

七、算法基础及常见的算法

(选择题【操作、流程】)

  • 算法基础

1、算法特性
软件设计师——【笔记】7数据结构与算法基础_第35张图片

2、算法的复杂度

主要两个维度

常数级复杂度都用O(1)表示[即O(3)也是O(1)] ;整个算法的复杂度为算法中最高的复杂度

O(log2n)如查找二叉树中,n为层数。

你可能感兴趣的:(笔记,#,软件设计师笔记,经验分享)