hashTable

#include <iostream>
#include <cstdlib>
using namespace std;

template<typename DataType>class HashTable
{

public:
    HashTable(int size){
        maxSize = size;
        int count = 0;
        elements = new DataType[size];
        if (elements == NULL)
            exit(1);

        for (int i =0; i < size; i++)
            elements[i] = NULL;
    }
    ~HashTable(){
        delete [] elements;
    }

    int hash(DataType value);
    int searchHash(DataType value);

    DataType getData(int i){
        if (i <=0 ){
            std::cout << "index error!, i must > 0" << endl;
        }
        return elements[i];
    }

    bool insertHash(DataType value);

private:
    int maxSize;
    int count;
    DataType *elements;
};

template<typename DataType> int HashTable<DataType>::searchHash(DataType value){

    int p = hash(value);

    if (elements[p] == value){
        return p;
    }
    int rp = (p+1) % maxSize;
    while(rp!=p){
        if (elements[rp] == value)
            return rp;

        if (elements[rp] == NULL)
            break;

        rp = (rp+1) % maxSize;
    }

    if (rp == p)
        return -2;
    else{
        // elelemts[rp] = value;
        return rp;
    }
}

template<typename DataType> int HashTable<DataType>::hash(DataType value){
    return value % 13;
}


template<typename DataType> bool HashTable<DataType>::insertHash(DataType value){

    int pos = searchHash(value);

    if (pos < 0){
        return false;
    }
    else if (elements[pos] == value){
        cout << "duplicate element!" << endl;
        return false;
    }
    else{
        elements[pos] = value;
        return true;
    }
}


int main(){

    HashTable<int> hashtable = HashTable<int>(13);

    int array[] = {66,32,98,478,11,23,43,55,67,108,230,223,10};

    for (int i=0; i < sizeof(array)/sizeof(int); i++){
        hashtable.insertHash( array[i] );
    }

    cout << "elements in table:";

    for (int i=1; i<=13; i++)
        cout << hashtable.getData(i) << " ";
    cout << endl;

    cout << "55 position:" << hashtable.searchHash(55) << endl;
    return 0;
}

转载于:https://my.oschina.net/innovation/blog/812770

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值