数据结构概论笔记

  1. 完全二叉树
    空树是完全二叉树。
    特点一:
    只允许最后一层有空缺结点且空缺在右边,即叶子结点只能在层次最大的两层上出现;
    特点二:
    对任一结点,如果其右子树的深度为j,则其左子树的深度必为j或j+1 即度为1的点只有1个或0个
  2. 满二叉树
    空树不是满二叉树。
    每个节点都存在左右孩子 并且左右子树深度要相同,满二叉树像正三角型。
  3. 数组和链表的区别:
    数组(顺序结构)和链表(链式结构)都是线性结构。
    但链表添加元素更快O(1)(不需要移动元素),但是查找元素需要遍历O(n)。数组在最后添加元素较慢O(n),但是查找元素较快O(1)(内存中连续存放,每个元素占用内存相同,直接通过下表可以访问)。
    数组元素在栈区,链表元素在堆区。
    数组在内存中连续,链表在内存中不连续。
  4. 堆区和栈区比较
    栈区和堆区的区别:
    1)申请方式: 栈区内存由系统自动分配,函数结束时释放;堆区内存由程序员自己申请,并指明大小,用户忘释放时,会造成内存泄露,不过进程结束时会由系统回收。
    2)申请后系统的响应: 只要栈的剩余空间大于所申请的空间,系统将为程序提供内存,否则将报异常提示栈溢出;堆区,空闲链表,分配与回收机制,会产生碎片问题(外部碎片)–>(固定分区存在内部碎片(分配大于实际),可变分区存在外部碎片(太碎无法分配))。
    3)申请效率:栈由系统自动分配,速度较快,程序员无法控制;堆是由new分配的内存,一般速度较慢,而且容易导致内存碎片,但是用起来方便!
  5. 哈希表(散列)和数组、链表的比较:
    数组查找容易,但是添加和删除麻烦。
    链表添加和删除容易,但是查找慢。
    哈希表结合两者的特征:
    一对一的查找效率很高。一个key对应一个链表时候查询效果较差。
    另,哈希表用到数组,数组特点是创建后扩容难,必须先知道表中要存多少数据。
  6. hashmap,冲突解决方法:开放地址法、再hash、缓冲区、拉链法(常用)。
  7. bitmap,连续的内存,bit级别操作。
  8. 图,应用场景比如计算两地的机票价格,查询A 到B地铁路线图等,图分为有向图和无向图。图的实现方法:邻接矩阵(费空间,但是顶点较多且之间链接密集时候好用)、邻接表、逆邻接表、十字链表(是邻接表和逆邻接表的结合)。
  9. hashmap和hashtable ,hashmap的key不可以重复,hashtable的value不可以重复。hashmap手写。######待续
  10. hash树和字典树,搬运 ,话说谁搞了这么多变种。
    哈希树的思想:质数3可以分辨3类结果。哈希树每层依次用质数2,3,5,7,11…来分辨,所以从2起的连续质数,连续10个质数就可以分辨大约M(10) =23571113171923*29= 6464693230 个数,已经超过计算机中常用整数(32bit)的表达范围
  11. 最小堆,维护完整流程。
    最小堆的构建:先按照二叉树方法从头挂载节点,无需考虑数字大小,得到一颗完全二叉树。
    最小堆的排序:深度优先,从最深的叶子开始排序(根节点要大于两个叶子节点,同根叶子节点之间不考虑大小),若叶子节点大于根节点则元素交换。
    最小堆插入元素:先插入到完全二叉树最深的节点,然后排序。
    最小堆删除元素:删除元素是指删除根节点。根节点删除,将最深的节点移动到堆顶,然后排序(和两个叶子比较,交换,比较…)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值