基本的数据结构

栈、队列、链表(单向/双向/循环)、树(二叉树/普通树【左孩子右兄弟表示法】)

散列表,普通数组概念的推广,普通数组可以直接寻址,能在O(1)时间内访问数组任意位置;如果存储空间允许,可以提供一个数组,为每个可能的关键字保留一个位置,然而 实际存储的关键字数目比全部的可能关键字总数要小,因此采用散列表是一种比较有效的替代方式。

散列表不是直接把关键字作为数组的下标,而是根据关键字计算出相应的下标

一个动态集合,n 个元素,每个元素都是取自于全域 U={0, 1, ..., M-1}中的一个关键字
直接寻址方式:为全域分配m个槽,关键字为k的元素存放在对应的槽k中
散列表:分配m个槽, 关键字为k的元素存放在槽h(k)中; 槽的个数m由散列函数决定,h : U -> {0, 1, ..., m-1}

冲突:两个关键字映射到同一个槽中
    一方面可以通过精心设计散列函数来尽量减少冲突的个数,另一方面需要解决出现冲突的问题
     链接法:同一槽中的所有元素放在一个链表中
      开放寻址法:所有的元素都存放在散列表里;因此散列表可能被填满,从而不能再插入新的元素
        处理冲突——通过 探查空槽来放置待插入的关键字
        1) 线性探查:h(k, i) = (h'(k) + i) mod m; i表示第i次探查
        2) 二次探查:h(k, i) = (h'(k) + ci + di^2) mod m
        3) 双重散列:h(k, i) = (h1(k) + ih2(k)) mod m

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值