数据结构与算法(重要知识总结)

一、基础知识

1、数据结构

逻辑结构:数据对象中数据元素之间的相互关系。
物理结构:数据的逻辑结构在计算机中的存储形式。

四大逻辑结构:集成结构、线性结构、树形结构、图形结构。

顺序存储结构:数据元素存放在地址连续的存储单元,数据间的逻辑关系和物理关系是一致的。
链式存储结构:数据元素存放在任意的存储单元,

2、算法效率
  1. 算法采用的策略、方案;
  2. 编译产生的代码质量;
  3. 问题的输入模块;
  4. 机器执行命令的速度;

二、线性表

1、链表

单链表,只有一个存放指针的模块,存放地址可以不连续,访问是方便访问当前节点的后继节点;
双链表,一个数据元素单元有两个存放指针的模块,一个指针指向前继节点,一个指针指向后继节点。
链表中因为头结点也会有所不同,可以循环链表或者其他,主要注意链表中指针的操作,属于细节问题且必须掌握,不赘述。

2、栈、队列

栈:先进后出。
队列:先进先出。

三、树

1、基础知识

树:是n个节点的有限集。
二叉树:除叶子结点外,每个节点的子节点数最多为2,空树也是二叉树。
满二叉树:非叶子节点的子结点数都为2,。
完全二叉树:叶子结点只能出现最下两层,可以非叶子结点可以只有左结点,但不可以有只有右结点。
二叉树性质:

  1. 在二叉树的第i层至多有2^i-1个结点。
  2. 深度为k的二叉树至多有2^k-1个结点。
  3. 对于任何一个二叉树,叶子结点数为n0,度为2的结点数为n2,则n0=n2+1
  4. 具有n个结点的完全二叉树的深度为log2n+1(向下取整)。
2、树的遍历

前序遍历:先访问根节点,再访问左结点,最后访问右结点。
中序遍历:先访问左结点,再访问根节点,最后访问右结点。
后序遍历:先访问左节点,再访问右结点,最后访问根节点。
层序遍历:一层一层的访问树的结点。

备注:构建树代码编写时常常使用递归(其他有关树操作也是)。

3、线索二叉树

线索二叉树中存放一个结点时分为五块,从左至右分别为:lchild,ltag,data,rtag,rchild。(构造时以中序遍历基础)

  1. ltag为0时,lchild指向该结点的左孩子;为1时,lchild指向该结点的前驱;
  2. rtag为0时,rchild指向该结点的右孩子;为1时,rchild指向该结点的后继;
4、二叉树、树、森林

树转二叉树:①在树中所有的兄弟之间加一条连线;②对每一个结点,除了保留与其左孩子(长子)的连线外,去掉该结点与其他孩子的连线。
森林转二叉树:①先将森林的每棵树变为二叉树;②再将各个二叉树的根节点视为兄弟似的从左至右的连在一起(第一个树转为二叉树的右子树)。
二叉树转树:①若结点x是其双亲y的结点,则把x的右孩子,右孩子的右孩子,,,,都与y连在一起;②去掉所有双亲到右孩子的连线。
备注:树的前序遍历对应树的二叉树的前序的遍历,后序遍历对应二叉树的中序遍历。

四、图

1、基础知识

图(Graph)是由顶点的有穷非空集合和顶点之间的边的集合组成,通常为G(V,E)其中G表示一个图,V是图G中顶点的集合,E是图中边的集合。
顶点:为图中数据元素。
无向边:顶点之间的边没有方向。
有向边:顶点之间的边有方向(出度:为指向其他顶点的边数,入度:为指向本顶点的边数)。

无向完全图:在无向图中,如果任意两个顶点之间都存在边,则称改图为无向图,含有n个顶点的无向图有n*(n-1)/2条边。
有向完全图:如果任意两个顶点之间都存在方向互为相反的两条弧,则称该图为有向图。

G1(V1,E1),G2(V2,E2),若V2包含于V1,E2包含于E1,则G2为G1的子图。
备注:每条带有权重的图就叫网

2、图的存储

领接矩阵:适合稠密图
用两个数组表示图,顶点放在一位数组,边放在二维数组。无向图为对称矩阵,有向图则不是。
邻接表:适合稀疏图
顶点用一维数组存储,图中每个顶点Vi的所有领接点构成一个线性表。
备注:其他存储方式有十字链表(适合有向图),领接多重表(方便删除)。

3、 图的遍历

深度优先遍历:在没有碰到重复顶点的情况下,分叉路口始终是向右手边走,每路过一个顶点就做一个记号。
广度优先遍历:以某个顶点开始先访问其所有连接顶点。

4、拓展知识
最小生成树(图中没有环路)

普里姆(Prim)算法:每次顶点连接权值最小边,若一个顶点与多个顶点连接,考虑选择权值最小的边。适合稠密图。
克鲁斯卡尔算法:将图中边按照权值从小到大排列,然后从最小的边开始,如果该边并入不构成回路的话,则将该边并入当前生成树,直到所有的边都检测完为止。适合稀疏图。

最短路径

网图:边上权值之和最少的路径。
非网图:两点之间经过边数最少的路径。

迪杰斯特拉算法:一步步求出一个顶点到所以顶点之间的最短路径。O(n^2)
佛洛依德算法:求出所有顶点到所有顶点的最短路径。O(n^3)

拓扑排序

无环图DAG(无环有向图)
AOW 网不存在回路

拓扑序列:设G(V,E)是一个具有n个结点的有向图,V中所有顶点序列满足若从顶点Vi-Vj有一条路径,则在顶点序列中Vi必在Vj之前。称这样的顶点序列为一个拓扑序列。

拓扑排序:对一个有向图构造拓扑序列的过程。

关键路径

AOE带权有向图,顶点为事件,边权值表示活动持续时间。

关键路径:事件完成时间最长的路径。

五、查找

1、普通查找方法

顺序查找、插值查找、斐波那契查找(黄金比例查找)、线性索引查找(稠密查找、分块查找、倒排查找)。
重点
二叉排序树:左子树上的值均小于它的根结点值,右子树上的值均大于根结点的值。
平衡二叉树:具有二叉排序树性质的同时,任意子树的左右子树的层数差值最多为1。

2、其他查找方法

B树:多路查找树的每个结点都具有两个孩子或多个孩子,所有叶子结点都在同一层次。
注意:插入需拆解应从小往上拆,先插入上一层,再在下一层分裂。
平衡多路查找树
1、把结点最大的孩子数目称为B树的阶;
2、根结点不是叶节点时,至少有两个子树;
3、非根结点的分支结点都有K-1个元素,K-1个孩子,K大于等于m+1向下取整,小于等于m;
散列表(Hash表)
在记录的存储位置和它的关键字之间建立一个确定的对应关系F,使得每个关键字key对应一个存储位置F(key),存储在一块连续的存储空间。
F:Hash函数,经典构造方法:除留余数法。
解决冲突
开放定址法:F(key)=F(key)+di,修改di值;
再hash法:再一次使用hash函数;
链地址法:数组存放地址,链表存放在此地址的关键字。
公共溢出法:开辟新的表格存放溢出的关键字。

六、排序

排序:线性表的一种操作。
冒泡排序:两两相邻的关键字比较,反序则交换位置。时间:O(n^2) ,空间O(1),稳定
快速排序:选取基准点,一边放小于基准点的数,另一边放大于基准点的数;再对左右区间重复该步骤,直到各区间只有一个数最初基准点左右两边的数进行交换。时间空间O(nlogn)-O(n^2), 不稳定
选择排序:通过n-i次比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录交换,直至序列有序。O(n^2) O(1) 稳定
堆排序:①待排序列构造大小根堆;②将根节点与末尾元素交换;③将剩余n-1个序列重新构造一个堆;④反复执行直至序列有序。O(nlogn) O(1) 不稳定
插入排序:讲一个记录插入到已经拍好的序的有序表中。O(n^2) O(1) 稳定
希尔排序:分成两组进行插入排序。O(n^2) O(1) 不稳定
归并排序,先左边排序,后右边排序,合并。O(nlogn) O(n) 稳定

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
数据结构与算法知识点包括以下内容: 1. 数据结构数据结构是指数据元素之间的关系和组织方式。常见的数据结构包括线性结构(如数组、链表、栈、队列)、树形结构(如二叉树、堆、哈夫曼树)和图形结构(如邻接矩阵、邻接表)\[1\]。 2. 算法算法是解决问题的一系列步骤或规则。常见的算法包括排序算法(如冒泡排序、快速排序、归并排序)、搜索算法(如线性搜索、二分搜索)、图算法(如深度优先搜索、广度优先搜索)和动态规划算法\[2\]。 3. 动态规划:动态规划是一种通过将问题拆分成一系列重复的子问题来求解问题的方法。它通常以自底向上的方式解决子问题,并将子问题的结果存储起来以避免重复计算\[2\]。 4. 贪心算法:贪心算法是一种通过每次选择局部最优解来得到整体最优解的方法。它通常以自顶向下的方式进行,每次作出贪心选择后将问题简化为规模更小的子问题\[3\]。 5. 位操作:位操作是在二进制数字符号的层面上进行的操作。它可以用来进行快速的比较和计算,比如按位与、按位或、按位异或等操作\[3\]。 这些知识点数据结构与算法中的基础,掌握它们可以帮助我们更好地理解和解决各种问题。 #### 引用[.reference_title] - *1* [数据结构与算法——知识点总结](https://blog.csdn.net/qq_41750911/article/details/125041841)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [数据结构与算法知识点总结](https://blog.csdn.net/weixin_40922285/article/details/103183295)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值