除留余数哈希表

发布时间:2023年12月23日

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

#include<iostream>
#include<list>
#include<time.h>
#include<vector>
using namespace std;
int creat_num()//创造两位数的整数
{
?? ?int n = rand() % 9;
?? ?n = n * 10 + (rand() % 9);
?? ?return n;
}

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

void inset_hash(vector<int>&v, vector<list<int>>&hash)

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

}

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


?? ?}
}
int main()
{
?? ?srand(time(NULL));
?? ?//创建10个链表,用于储存取余后的整数
?? ?vector<int>v;
?? ?vector<list<int>>hash;
?? ?list<int>l0;
?? ?list<int>l1;
?? ?list<int>l2;
?? ?list<int>l3;
?? ?list<int>l4;
?? ?list<int>l5;
?? ?list<int>l6;
?? ?list<int>l7;
?? ?list<int>l8;
?? ?list<int>l9;
?? ?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;
}

文章来源:https://blog.csdn.net/LCK_jack/article/details/135171536
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。