数据结构笔记

本文介绍了数据结构中的查找方法,包括顺序查找、二分法查找、分块查找和哈希表查找,并详细讲解了哈希表的工作原理,如哈希函数和线性探查解决冲突的方法。还提供了使用哈希表存储数据的C语言实现示例。此外,文章也涉及到了字符串中出现次数最多的字符查找问题以及位操作的练习。
摘要由CSDN通过智能技术生成

1 顺序查找(编程简单,但效率低,要查找的数小于10000条)

2 二分法查找(必须是有序表)

3 分块查找(块间有序,块内无序)  块间可以用顺序或二分法查找,块内只能顺序查找
  有一个索引表(记录了块间间隔点,和每块的最大值)

4 hash表(哈希表,散列表)
哈希表

关键字 根据 一个算法求出 一个位置(此关键字保存的位置)

算法(哈希函数)

直接地址法
平方取中法
叠加法

顺序查找   二分法查找   分块查找    哈希查找  
按 从快  到慢 排序
哈希  >  二分  >  分块   >  顺序

哈希表查找:

质数除余法: 1)  选取小于表长的最大质数(例: 表长20----> 19      表长15---> 13),
            2)  每个关键字对 19取余,求出位置

装填因子:    元素个数 / 实际表长 (11 / 15 = 0.75)
    一般都选  0.75  或者  0.5

表长如何设计?   通过元素个数 和 装填因子求出表长:   元素个数 / 装填因子 (11 / 0.75 = 15)
     
线性探查法: 如果将要存入数据的位置有数,那么存入+1位置,如果还有+2, +3 ....
4 质数除余法
练习: 用 保留余数法存 k={23,34,14,38,46,16,68,15,07,31,26} 数据,
采用 线性探查解决冲突(一旦冲突往 +1, +2, +3, +...位置存)
#include <stdio.h>
int hash_fun(int x)
{
    return x % 13;
}
int find_by_hash(int *p, int x)
{
    int pos = hash_fun(x);
    while(p[pos] != x && p[pos] != 0)
    {
        pos++;
        pos = pos % 15;
    }
    if(p[pos] == 0)
        return -1;
    else
        return pos;
}
void save_by_hash(int *p, int x)
{
    int pos = hash_fun(x);
    while(p[pos] != 0)    //只要有数据,就说明冲突,继续向下找
    {
        pos++;
        pos = pos % 15;
    }
    p[pos] = x;
}
int main()
{
    //1 定义原始数据   
    int n, i, a[] = {23, 34, 14, 38, 46,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值