数据结构与算法基础知识
线性表
定义:一个线性表是n个元素的有限序列,
线性表的顺序存储
一组地址连续的存储单元依次存储线性表中的数据元素,从而使得逻辑上相邻的两个元素在物理地址上也相邻
优点:可以随机存取表中的元素,按序号查找元素的速度很快
缺点:插入和删除操作需要移动元素
链式存储
用节点来存储数据元素,元素的节点地址可以连续,也可以不连续。
优点:空间利用率高
缺点:只能顺序访问数据,查询效率低,不能随机存取。
链表的类别
单链表
循环列表
双链表
栈(特殊线性表)
先进后出
顺序栈
用一组地址连续的存储单元依次存储自栈顶到栈底的数据元素
链栈
用链表存储栈中的数据
栈中的元素的插入和删除仅在栈顶进行,因此不必设置节点
队列
先进先出的线性表
顺序队列
循环队列:队头队尾连接
链队列
串
字符串
存储结构
数组和矩阵
数组
一位数组,长度固定的线性表
二维数组,已行为主序和以列为主序两种方法
矩阵
对称矩阵aij=aji
三对角矩阵
稀疏矩阵:三元组确认唯一元素
树和二叉树
树是n(n>= 0)个节点的有限集合
二叉树是n(n>= 0)个节点的有限集合,它或者是空树n=0,或者是由一个根节点及两棵不相交的,分别称为左子树和右子树的二叉树所组成
二叉树的性质
第i层上至多有2^(i-1)个节点
深度为k的二叉树至多有2^k-1个节点
对任何一颗二叉树,若其终端结点数为n0,度为2的结点数为n2,则n0=n2+1
满二叉树’
深度为k的二叉树有2^k-1个节点
完全二叉树
当深度为k,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号为1~n的结点一一对应时,称之为完全二叉树
二叉树的存储结构
①顺序存储:适合满二叉树和完全二叉树、
②链式存储:二叉链表/三叉链表
二叉树的遍历
按某种策略访问树中的每个结点,且仅访问一次
中序:左中右
最优二叉树(哈夫曼树)
带权路径长度最短的数
现在有一组权值{30,25,15,22,8}m演示利用这组权值构造最优二叉树的过程
①先找出权值最小的两个8,15,构造二叉树
②23再和22构造二叉树
③45再和55构造二叉树
45 55
23 22 25 30
8 15
应用:对字符集中的字符进行编码和译码
二叉查找树
或者是一棵空树,或者是具有如下性质的二叉树
左子树非空,左子树上所有的结点的关键码值均小于根节点的关键码值
右子树非空,~
左右子树都是二叉查找树
结合中序遍历法,得到的是一个有序的关键码值序列
应用:查找数值
图
定义:一个图是由两个集合V和E所组成的,V是有限的非空顶点集合,E是用顶点表示的边集合,图G的顶点集和边集分别记为V和E,而将图G记作G=V,E
可以看出,一个顶点集合与连接这些顶点的边的集合可以唯一表示一个图
在图中,数据结构中的数据元素用顶点表示,数据元素之间的关系用边表示
算法
排序算法
直接插入排序
冒泡排序
简单选择排序
希尔排序
快速排序(分区交换排序)
堆排序
归并排序
查找算法
查找表定义
由同一类型的数据元素或记录构成的集合
静态查找表:查询和检索
动态查找表:还要插入和删除
关键字:数据元素的某个数据项的值
查找:根据给定的某个值,在查找表中确定是否存在一个其关键字等于给定值的记录或数据元素
平均查找长度:衡量查找算法好坏的依据
查找算法:
顺序查找
二分查找
树表查找:二叉查找树
索引顺序查找
哈希查找
哈希查找冲突的处理:①开放定址法;②链地址法
图的算法
生成树与最小生成树
生成树
设图G=V,E是一个连通图, (如果其子图是一棵包含G的所有顶点的书,则该子图为G的生成树)
最小生成树
连通网,边是带权值的,生成树的各边也带权值,于是就把生成树各边的权值总和成为生成树的权,把权值最小的生成树称为最小生成树
求最小生成树的算法:
①普里姆算法:以顶点为主
②克鲁斯卡尔算法:以边为主
最后,推荐一个学习数据结构与算法的网站
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具