除留余数哈希表

 实验要求:随机生成20个两位整数,使用除留玉树法的哈下函数以及链表法解决哈希冲突,生成哈希表。

#include
#include
#include
#include
using namespace std;
int creat_num()//创造两位数的整数
{
    int n = rand() % 9;
    n = n * 10 + (rand() % 9);
    return n;
}

void creat_data(vector&v)//将生成的20个随机数存入vector
{
    for (int i = 0; i < 20; i++)
    {
        v.push_back(creat_num());
    //    v.push_back(rand() %99);
    }
}

void inset_hash(vector&v, vector>&hash)

//将v容器的数据全部储存到hash中,并按余数插入链表
{
    vector>::iterator hit = hash.begin();
    for (vector::iterator it = v.begin(); it != v.end(); it++)
    {
        int tmp = (*it) % 10;
        (hit + tmp)->push_back((*it));
    }

}

void show(vector>&hash)
{
    vector>::iterator hit = hash.begin();
    for (; hit != hash.end(); hit++)
    {
        list::iterator tmp = hit->begin();
        for (; tmp != hit->end(); tmp++)
        {
            cout << (*tmp) << ' ';
        }
        cout << endl;


    }
}
int main()
{
    srand(time(NULL));
    //创建10个链表,用于储存取余后的整数
    vectorv;
    vector>hash;
    listl0;
    listl1;
    listl2;
    listl3;
    listl4;
    listl5;
    listl6;
    listl7;
    listl8;
    listl9;
    hash.push_back(l0);
    hash.push_back(l1);
    hash.push_back(l2);
    hash.push_back(l3);
    hash.push_back(l4);
    hash.push_back(l5);
    hash.push_back(l6);
    hash.push_back(l7);
    hash.push_back(l8);
    hash.push_back(l9);
    creat_data(v);
    inset_hash(v, hash);
    show(hash);

    
    
    return 0;
}

你可能感兴趣的:(数据结构学习日志,C++学习日志,没发现问题的题,散列表,哈希算法,数据结构,c++)