首页 > 其他 > 详细

数据结构

时间:2020-03-08 12:57:12      阅读:59      评论:0      收藏:0      [点我收藏+]

1.顺序表 1.顺序表由数组,最后一个元素的位置构成,Last从-1开始
2.堆栈 1.堆栈,由数组,栈的最大规模,栈顶构成,自己写操作集时,可以自己定规则
2.c++自带函数stack 3.二叉树 1.二叉树的遍历可以通过递归函数实现(以前感觉递归函数反人类,现在感觉是真好用啊) 2.遍历也可通过堆栈或队列来实现,今天仅稍作了解,明天学习具体实现过程 3.二叉搜索树 #2020/1/10 15点54分 1.二叉搜索树可以理解为按照特定次序排列的二叉树 2.插入时,通过递归实现,需分是否为空树来插入 3.删除也是用递归来实现,寻找,即遍历,不再描述,删除时,分三类情况判断 1.为叶节点,直接删除 2.仅存在左节点,用左节点取代此节点 3.存在右节点,从有孩子树中找到最小的(可通过FindMin函数实现),取代此节点,并删除右孩子树最小结点 #2020/1/10 15点54分 4.寻找,不再表述,遍历而已 5.理论上,因为他是有序的,所有操作均可不通过递归实现(有待验证) 4.平衡二叉树 1.平衡二叉树的调整多通过递归实现 2.分为左单旋、右单旋,左右双旋,右左双旋 1.左右双旋,右左双旋过于简单,不再描述 2.左单旋:B为A的左枝,第一步,B的右枝给A的左枝;第二步,A去做B的左枝;第三步,返回B的地址; 3.右单旋同理 3.平衡二叉树需要获取树高,当左右两侧树高差大于2,则需调整 4.单旋调整的前提:两次都向同一侧偏 5.双旋调整前提:两次向不同方向偏 4.堆 1.有最大堆,最小堆 2.通常用于求某些数中前多少大/小 3.堆通常用数组储存,核心思想,我认为应该是过滤 4.插入 1.从最后一个元素开始,向上过滤,找小于/大于它的数 2.找到后,将会有一个空出来的位置,插进去 3.0的位置存放不可能的值,以便今后的插入操作(初始化时完成) 5.最大堆的建立实质为先将数乱序存到数组里,再一遍遍过滤 5.哈夫曼树 目前看来 只有在压缩方面可以使用 6.邻接矩阵 用矩阵的形式储存图 7.邻接表 顶点用数组储存,边为链表,链接在顶点的后面(目前看来,仅有拓扑排序时用这种方式好) 8.广搜 用队列 深搜 用栈或者递归 9.最小生成树 1.Prim算法 以某一顶点为起始树,算出每个点到树的距离,连接距离最小的点,更新其他点到树(只需计算未加入的点到新加入的点的距离),重复至所有点都加入 2.Kruskal算法 以邻接表为图,每次选取未连接的点中的最短边加入树,然后舍弃所有与此顶点相连的边, 直到图中所有边选取完或者选取了顶点数量-1的边,如果结束时数量不足,返回false 10.最短路径 1.单源最短路径 以某一顶点为起始,算出每个点到起始点的距离,连接距离最小的点,更新其他点到起始点(只需计算未加入的点到新加入的点的距离),重复至所有点都加入 2.每一对顶点之间的最短距离 弗洛伊德算法 三重循环将邻接矩阵中的每一点,查找能否在两个分量上是否存在更小的距离(实际意义为经由某个点来联通两个点) 11.拓扑排序 1.构造邻接表,并构造出入度数组 2.寻找入度为零的点,加入拓扑数组(自己起的名字,就是存放排好序的数的地方),所有这个点的边所指向的点,入度减一(即删除所有与选取的这个点相连的边) 3.重复至没有入度为零的点,检测点是否全部加入拓扑数组,否则返回false 12.关键路径计算 1.拓扑排序 2.由拓扑排序计算出每条边的最早开始时间(正向) 3.计算出每条边的最晚开始时间(最晚开始时间为从最后一个点开始往前推,后一个点的最晚开始时间减掉自身所花费的时间) 4.最晚时间与最早时间相同的点就是关键点 5.存在的问题,多起点,多终点或者多条关键路径没有办法确定从哪条边开始 13.哈希散列 1.通过对名字等信息通过某种函数变换得到唯一位置 2.冲突可以开放定址或分离链接 我更喜欢分离链接 3.这个东西在考虑安全时 会与信息安全相关联 即加密解密

数据结构

原文:https://www.cnblogs.com/Bunny-a/p/12441576.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!