算法导论第11章散列表11.1直接寻址表

一种动态集合结构,只支持,插入,查找,删除三种操作。

直接寻址:

在空间允许的情况下,提供一个数组为每个可能的关键字保留一个位置。

首先直接寻址技术不是散列表的一种,它是类似数组的一种数据结构,第11章,名字叫散列表三个字对应Hash Tables

 

 

散列表比直接存储的好处是,节省空间

 

UVC1L{$2`]EOI@8QX)ILUJK

 

H4_L(F1_8RWPP(NS{O3LB{U

 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/*
 * IA_11.1DirectAddressTables.cpp
 *
 *  Created on: Feb 11, 2015
 *      Author: sunyj
 */
#include <stdint.h>
#include <iostream>
#include <string.h>
// DIRECT-ADDRESS-SEARCH(T, k)
// return T[k]
 
// DIRECT-ADDRESS-INSERT(T, x)
// T[x.key] = x
 
// DIRECT-ADDRESS-DELETE(T, x)
// T[x.kdy] = NIL
 
template <class Type> class ElemType {
public:
    ElemType() : key(0), data('\0') { }
    ElemType(int64_t const k, Type const d) : key(k), data(d) { }
 
    int64_t key; // key belongs to a small range like [0, 1, 2, 7, 99.... ]
    Type data;
};
 
template <class Type> class DirectAddressTable {
public:
    DirectAddressTable(int64_t const n) : size(n)
    {
        data = new ElemType<Type>[n];
        memset(data, -1, n * sizeof(ElemType<char>));
    }
    ~DirectAddressTable() { delete [] data; }
    ElemType<Type> search(int64_t const key)
    {
        if (-1 == data[key].key)
        {
            std::cout << "not found search failed" << std::endl;
        }
        return data[key];
    }
    void insert(ElemType<Type> x)
    {
        if (-1 != data[x.key].key)
        {
            std::cout << "x.key already exist, insert failed" << std::endl;
            return ;
        }
        data[x.key] = x;
    }
    void del(ElemType<Type> x)
    {
        if (-1 == data[x.key].key)
        {
            std::cout << "x.key not exist, delete failed" << std::endl;
            return ;
        }
        data[x.key].key = -1;
    }
private:
    ElemType<Type>* data;
    int64_t size;
};
 
int main()
{
    ElemType<char> a(2, 'b');
    ElemType<char> q(3, '8');
    ElemType<char> c(22, 'q');
    ElemType<char> w(9, 'N');
 
    // Assume there are at most 100 ElemType element,
 
    DirectAddressTable<char> table(100);
    table.insert(a);
    table.insert(q);
    table.insert(c);
    ElemType<char> tmp;
    tmp.key = 3;
    tmp = table.search(tmp.key);
    std::cout << tmp.data << std::endl;
    tmp.key = 4;
    tmp = table.search(tmp.key);
    std::cout << tmp.data << std::endl;
 
    table.insert(a); // insert failed
    table.del(a);
    table.insert(a); // ok
    tmp = table.search(2);
    std::cout << tmp.data << std::endl;
    return 0;
}

 

 

 

 

 

9a504fc2d5628535f161962092ef76c6a7ef63299c86aa6f6cc2111d8976324819b6db9c9V3GUF5D5O3600059V3GUFKN5O3600059VF7PH1S5O3500059VMB3CJC5O3600059VT974GB5O360005

posted @   孙永杰  阅读(259)  评论(0编辑  收藏  举报
编辑推荐:
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
阅读排行:
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· 一个基于 .NET 开源免费的异地组网和内网穿透工具
· 《HelloGitHub》第 108 期
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单
点击右上角即可分享
微信分享提示