【软考】—数据结构与算法基础

前言

编程好比是一辆汽车,而数据结构和算法是汽车内部的变速箱,一个开车的人不懂变速箱的原理也是能开车的,当然不同不懂数据结构和算法的人也能编程,但是程序的性能是不一样的

数据结构分类

这里写图片描述
最常用的是线性结构和非线性结构,下面将两个结构细化。
这里写图片描述

线性表

线性表分为顺序表和链表。顺序表分为栈和队列,链表又分为单链表、循环链表和双链表。链表的操作中需要掌握单链表的结点删除和单链表的结点插入。链表还包括栈(先进后出)、队列(先进先出)和循环队列。

树和二叉树

树的组成:结点的度、树的度、叶子结点、分支节点、内部节点、父、子结点、兄弟结点、层次。
这里写图片描述
结点的度:一个结点含有的字数个数,如1号节点的度为3(2,3,4是结点1的度)。
树的度:所有结点度最高的一个 ,图中结点度最高为3,所以树的度为3。
叶子结点:没有孩子的节点,也就是度为0的结点是叶子结点。图中,3、5、6、7、9、10结点都是叶子结点。
分支结点:除了叶子结点,都是分支节点。 图中 1、2、4、8都是分支结点。
叶子结点和分支结点互补,结合在一起就是一棵树。
内部结点:内部结点是有孩子的。图中2、4、8是内部结点根节点不是内部结点。

二叉树

概念:至多有两颗子树,有左右之分。
二叉树的五种形式:
这里写图片描述
二叉树的特征:
这里写图片描述
二叉排序树(查找二叉树):
- 左子树上所有结点的key均小于根的key
- 右子树上的所有结点均大于根的key
- 左右子树又各是一颗二叉排序树
二叉平衡树:树上任一结点的左子树和右子树的深度之差 \leq1
线索二叉树:目的加快查找结点的前驱和后继的速度 ,把他们链起来。
如图把二叉树转化为前序线索二叉树:
这里写图片描述
把二叉树的前序遍历转换成线性结构:A B D E H C F G I 然后在找出每个点的前驱和后继用箭头链接起来。
最优二叉树:给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。

有向图:
这里写图片描述
入度、出度:E的入度为2,出度为4
顶点的度:入度+出度 如图E的度为6
有相连通图:强连通:任意两点都有路径可以互相到达
弱连通:两点之间只有一方能到达,如图A能到达B,B不能到达A
无向图:
这里写图片描述
顶点的度:如1的度为3 (与之关联的边有几条)
无相连通图:图中任何两个顶点都是有路径可以到达的

完全图:
- 在无向图中,若每对顶点之间都有一条边相连,则称完全图
- 在有向图中,若没对顶点之间都有二条有向图相互链接,则是完全图

图的遍历:
这里写图片描述

哈希表

散列表(哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
常用的哈希函数构造方法:直接地址法、数字分析法、平方取中法、折叠法、出留余数法
常用处理冲突的方法:开放地址法(线性探测法和双散列函数法)、拉链法

算法

各类排序算法时间复杂度和空间复杂度对比表:
这里写图片描述
顺序查找:从表的一端开始,按顺序比对当前节点与关键字是否相同的一个查找方法。
二分查找:插值查找的特殊形式,每次查找在数组的二分之一处。

总结

数据结构与算法对开发人员来说是非常基础的东西,编程实践中,到处都用得到,更应该学好、学博、学精。
这里写图片描述这里写图片描述
看视频去了

猜你喜欢

转载自blog.csdn.net/a15076159739/article/details/82385828