数据结构方面

heap是堆,stack是栈
堆上的空间是用户手动分配和释放,有很大的自由存储区,c的malloc函数,c++的new操作符分配在堆上。

python面向对象
malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符
python的构造函数是__init__,析构函数是__del__
继承语法 class 派生类名(父类名),在python中继承中的一些特点:
1:在继承中父类的构造(init()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。
2:在调用父类的方法时,需要加上父类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数
3:Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到父类中逐个查找。
类的方法:使用def关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数
类的私有方法和私有成员:两个下划线开头

二叉搜索树:也称为二叉排序树,二叉查找树,左子树上所有节点的值不大于此节点的值,右节点上所有节点的值不小于此节点的值。
平衡二叉树:在二叉搜索树上增加条件,左右两个子树的高度差绝对值不超过1.
红黑树:放宽了平衡二叉树的平衡条件,基于颜色的平衡,对于任意节点,从它到叶子节点的所有路径上都有相同数目的黑色节点。简化平衡条件,降低旋转的要求,任何不平衡都能在三次旋转以内解决。红黑树的统计性能要好于平衡二叉树,这也是STL中map和set使用红黑树实现的原因
B树:是在平衡二叉树的思想上的一个扩展,从平衡二叉树到平衡多叉树。阶:一个节点最多有m个孩子节点,则这个树是m阶的。b树一般不高,主要用于内外存交换数据,如数据库中的索引。
性质:
1、如果根节点不是叶子结点,则至少应该有两颗子树;
2、m/2向上取整 <= 每个结点的孩子个数的取值 <= m,即要求至少半满;关键字个数比孩子数少1;
3、所有的叶子结点在同一层次;
4、每个结点都包含三个属性:n、K、A。n是这个结点包含的关键字个数,如下图每个结点第一个数字都代表个数;K就是关键字,如图中的 K1、K2、K3分别代表3、5、8;A是这个结点指向孩子结点的指针,如图中的A0~A3。每个关键字的左边的A指向的子结点上所有关键字都比它小,右边的都比它大,如5左边的是A1,A1指向的是4比5小,右边的是A2,A2指向的是6、7组成的结点,都比5大。
这里写图片描述
B+树:更适合范围查找。B树的中序遍历需要太多次I/O访问次数了,中序遍历以后的序列是整个树的所有关键字的一个从小到大排序的序列。现在数据库中多用B+树实现索引,取代了B树实现索引。
B+树与B树差异在于:
1、每个结点除了自身关键字外,还需要将父结点关键字保存起来;
2、所有的叶子结点包含所有的关键字信息,以及指向这些关键字记录的指针,叶子结点本身按照自小而大的顺序连接(每个叶子结点都有一 个指针指向下一个叶子结点);
3、所有的分支结点都可以看做是索引,它只是其孩子结点的最大或者最小的关键字。这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值