数据结构 概述

绪论

数据结构
	逻辑结构
		线性
			线性表
				顺序结构
					顺序表
						1~n 插入i个位置前 move  1 i-1 new i  n ; 插入i个位置后 move  1 i new i+1  n
				链式结构
					单链表
					双链表
					循环链表
					静态链表
						使用数组实现
				比较
					存储 顺序表
					运算 查找 顺序表| 增删 链表
					环境 顺序表
			受限线性表
				队列
					顺序队列
						判满 Q.rear - Q.front = MaxSize - 1 
							
					循环队列
						判满 (Q.rear + 1) % MaxSize = Q.front
					链式队列
					双端队列
				栈
					顺序栈
					链栈
					共享栈
			数组
				存储结构
					行优先 00 01 10 11
					列优先 00 10 01 11
				压缩存储
					同元素共用 0元素不分配
					对称矩阵
						arr[n*(n+1)/2] equal arr[n][n]   1start
						(i+1)i/2+j i>=j	  
						(j+1)j/2+i i<j
                       三角矩阵
                       三对角矩阵
                       稀疏矩阵
             String
             	基本概念
        	     	主串
    	         	子串
	             	串长
	          	存储结构
	          		定长顺序结构
	          		堆分配存储
	          		块链存储
	          	模式匹配算法
	          		朴素
	          		改进的KMP
             	
								
				
		非线性
			树
				性质
					树中  结点数 = 总度数 + 1
					度为m的树中 第i层的最多结点数 m^(i-1)    m=3 i=3 9
					高度为h,m叉树中  最多结点数 (m^(h)-1) / (m-1)  m=3 h=3 13
					结点数为n的m叉树的最小高度 logm(n(m-1) + 1)
				术语
                  	  	有序树和无序树
                   		路径长度 边的个数
                    	森林 互不相交的树的集合
				一般树与森林
					存储结构
						顺序存储 index data parent 双亲表示法
						顺序存储 P + 链式存储C 孩子表示法
						链式存储  Chile Parent Brother
					遍历
						先根遍历
						后根遍历
					操作
						树与森林之间的转换
							Chile Parent Brother
						遍历
					应用
						查并集
				二叉树
					特殊二叉树
						满二叉树 h为高度 结点数 2^h - 1
						完全二叉树 h为高度 编号与满二叉树一致
						二叉排序树 左小 右大
							结点删除you
								左子树空 ,右子树
								右子树空 ,左子树
								左右均不空 右子树的左子女 or 左子树的右子女
							查找效率 
								ASL = 结点高度和/结点数
						二叉平衡树 左右子树高度差 <=1
							插入
								不平衡的处理
                                        LL 右单旋转
                                            Lnode的Lchild不变,Rnode的Rchild不变
                                            Lnode的Rchild to Rnode的Lchild
                                         RR 左单旋转
                                            Lnode的Lchild不变,Rnode的Rchild不变
                                            Rnode的Lchild to Lnode的Rchild
                                            
                                         LR = LLRR
                                         RL = RRLL
                           哈夫曼树  最小带权长度二叉树
	                           带权路径长度WPL = 路径长度*权重 之和
					存储结构
						链式存储 常用
							* public class TreeNode {
                               *     int val;
                               *     TreeNode left;
                               *     TreeNode right;
                               *     TreeNode(int x) { val = x; }
                               * }
						顺序存储 层序遍历的编号
					操作
						三种遍历
							先序 	中左右
                                    class Solution {
                                        public List<Integer> preorderTraversal(TreeNode root) {
                                            List<Integer> res = new LinkedList<>();
                                            preorder(root,res);
                                            return res;
                                        }

                                        public void preorder(TreeNode root, List<Integer> res){
                                            if(root==null){
                                                return;
                                            }
                                            res.add(root.val);
                                            preorder(root.left,res);
                                            preorder(root.right,res);  
                                        }
                                    }
							中序	左中右
							后序	左右中
							层序遍历
                                    class Solution {
                                        public List<List<Integer>> levelOrder(TreeNode root) {
                                            List<List<Integer>> ret = new ArrayList<List<Integer>>();

                                            if(root==null){
                                                return ret;
                                            }
                                            Queue<TreeNode> queue = new LinkedList<>(){{ add(root); }};

                                            while(!queue.isEmpty()){
                                                List<Integer> temp = new LinkedList<>();
                                                int leveSize = queue.size();
                                                for(int i = 0; i < leveSize; ++i){
                                                    TreeNode node = queue.poll();
                                                    temp.add(node.val);
                                                    if(node.left!=null){
                                                        queue.add(node.left);
                                                    }
                                                    if(node.right!=null){
                                                        queue.add(node.right);
                                                    }
                                                }
                                                ret.add(temp);
                                            }
                                            return ret;
                                        }
                                    }
						线索二叉树
							lchild ltag data rtag rchild
								rtag ltag
					应用
						哈夫曼树
						排序二叉树
			图
				定义
					有向图
                            出度
                            入度
					无向图
						 度
					简单图
						无环
						无重复边
					完全图
						有向
						无向
					子图
					连通图 顶点间是至少是单向可到达
						连通分量 极大连通子图
					强连通图 顶点间是相互可到达
						强连通分量 极大强连通子图
					生成树 包含图中所有顶点的极小连通子图,边可不要就不要
					生成森林 由生成树组成
					稠密图/稀疏图 边的数
					简单路径 顶点不重复出现
					有向树 1个顶点 入度为0 其他入度为1
					网 边上有权值的图
				存储结构
					邻接矩阵法 数组
						[1,2][1,3][2,3][3,2]
						1234
						
						0110
						0010
						0100
					邻接表 链表
						[1,2][1,3][2,3][3,2]
						1->2->3
						2->3
						3->2
					邻接多重表
						无向图
							node  data| firstPointer
							edge  nodeIndex|next|nextIndex|nextIndexEdge
					十字链表
						[v1,v2][v1,v3]
						[v3,v1][v3,v4]
						[v4,v1][v4,v2][v4,v3]
						v1 0
						v2 1
						v3 2
						v4 3
						node  data| inPointer| outPointer
						edg   outIndex| inIndex|  sameIn|next
				遍历
					深度优先DFS
						递归
						性能分析 bad空间|V|
							邻接表 时间V+E
							邻接矩阵 V^2
						深度优先生成树、生成森林
					广度优先BFS
						层序遍历
						性能分析 bad空间|V|
							邻接表 时间V+E
							邻接矩阵 V^2
						广度优先生成树
					深度优先搜索
				应用
					最小生成树
						prim
							点优先
						kruskal
							线优先
					最短路径
						Dijkstra 单源最短路径
						Floyd 单源最短路径
					有向无环图DAG
						同一数组只出现一次
					AOV网 与拓扑排序
					关键路径
						关键路径通常(但并非总是)是决定项目工期的进度活动序列。它是项目中最长的路径,即使很小浮动也可能直接影响整个项目的最早完成时间
						关键路径不唯一
			集合
	物理结构
		顺序
		链式
		索引
			Map
		散列
	数据的运算

数据结构的基本概念

数据 信息载体
数据对象 相同性质的数据元素的集合
	数据元素 数据的基本单位
	数据元素 数据的基本单位
	数据元素 数据的基本单位
数据类型
	原子类型
	结构类型
	抽象数据类型
数据结构
	数据元素的集合

算法和评价

特征
	特性 有穷性 确定性 可行性 输入 输出

判断标准
	正确性
	可读性
	健壮性
	效率和低存储量要求
度量
	空间复杂度
	
	时间复杂度

数据的运算

静态查找
	元素是否存在
    通过属性查找
动态查找
	静态查找 + 插入、删除
	线性结构
		顺序查找
			ASL
				n个元素 一般线性表		
					average (n+1)/2
					bad n+1
                n个元素 有序线性表
	                average (n+1)/2
                	bad n/2 + n/(n+1)
		折半查找
				n个元素 有序线性表
	                average log2(n+1) - 1
		分块查找
			ASL
                n个元素 一般线性表  b块 块长s
                    average
                        索引查找+块内查找 = (b+s)/2 + 1
                   	average s = n^(1/2)
	                   	n^(1/2) + 1
		            average
		            	s/2 + [log2(b+1)]
		            	
			二叉排序树 
				查找成功 ASL = 高度和/非叶子数  圆点
				查找不成功 ASL = 叶子路径和/叶子数 方块
		            	
                   		
			
	树形结构
		二叉排序树
		二叉平衡树
		B树
			多路平衡查找树
			高度
				h = (n+1)/2 +1
		B+树 符合数据库需求的B树
		散列表
			ASL = 关键数 比较次数之和/关键字数
			查找效率
				散列函数
				冲突处理
				装载因子
			

排序

排序法最好平均时间最坏稳定额外空间
冒泡排序O(n)O(n^2)O(n^2)稳定O(1)
选择排序O(n^2)O(n^2)O(n^2)不稳定O(1)
插入排序O(n)O(n^2)O(n^2)稳定O(1)
快速排序O(n log n)O(n log n)~ O(n)O(n^2)不稳定O(n log n)
堆排序O(n log n)O(n log n)O(n log n)不稳定O(1)
希尔排序不稳定O(1)
归并排序O(n log n)O(n log n)O(n log n)稳定O(n)
基数排序O(d(r + n))O(d(r + n))O(d(r + n))稳定O( r )
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值