码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-02-11 20:31:23      阅读:401      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

技术分享

技术分享

 

/*
 * 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

class DataType {
public:
    DataType() : key(0), data(‘\0‘) { }
    DataType(int64_t const k, char const d) : key(k), data(d) { }

    int64_t key; // key belongs to a small range like [0, 1, 2, 7, 99.... ]
    char data;
};

class DirectAddressTable {
public:
    DirectAddressTable(int64_t const n) : size(n)
    {
        data = new DataType[n * sizeof(DataType)];
        memset(data, -1, n * sizeof(DataType));
    }
    DataType search(int64_t key)
    {
        if (-1 == data[key].key)
        {
            std::cout << "not found search failed" << std::endl;
        }
        return data[key];
    }
    void insert(DataType x)
    {
        if (-1 != data[x.key].key)
        {
            std::cout << "x.key already exist, insert failed" << std::endl;
            return ;
        }
        data[x.key] = x;
    }
    void del(DataType x)
    {
        if (-1 == data[x.key].key)
        {
            std::cout << "x.key not exist, delete failed" << std::endl;
            return ;
        }
        data[x.key].key = -1;
    }
private:
    DataType* data;
    int64_t size;
};

int main()
{
    DataType a(2, ‘b‘);
    DataType q(3, ‘8‘);
    DataType c(22, ‘q‘);
    DataType w(9, ‘N‘);

    // Assume there are at most 100 DataType element,

    DirectAddressTable table(100);
    table.insert(a);
    table.insert(q);
    table.insert(c);
    DataType 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;
}

 

 

 

 

 

技术分享

技术分享技术分享技术分享技术分享技术分享技术分享技术分享

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

标签:

原文地址:http://www.cnblogs.com/sunyongjie1984/p/4286900.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!