利用哈希表实现数据查找

来源:互联网 发布:js 两个时间相减 编辑:程序博客网 时间:2024/06/15 22:25
题目:现在有一个用来存放整数的Hash表,Hash表的存储单位称为桶,每个桶能放3个整数,当一个桶中要放的元素超过3个时,则要将新的元素存放在溢出桶中,每个溢出桶也能放3个元素,多个溢出桶使用链表串起来。此Hash表的基桶数目为素数P,Hash表的hash函数对P取模。#include<iostream>using namespace std;#define P 7#define NULL_DATA -1#define BUCKET_NODE_SIZE 3struct bucket_node{int data[BUCKET_NODE_SIZE];struct bucket_node *next;};bucket_node hash_table[P];void InitHashTable(bucket_node(*ht)[P]){for(int i=0; i<P; ++i){for(int j=0; j<BUCKET_NODE_SIZE; ++j){(*ht)[i].data[j] = NULL_DATA;}(*ht)[i].next = NULL;}}int Hash(int X){return X % P;}void insert_new_element(bucket_node(*ht)[P], int x){int index = Hash(x);for (int i = 0; i < BUCKET_NODE_SIZE; i++){if ((*ht)[index].data[i] == NULL_DATA){(*ht)[index].data[i] = x;return;}}bucket_node *s = new bucket_node;s = (*ht)[index].next;bucket_node *p = &(*ht)[index];while(s != NULL){for(int i = 0; i < BUCKET_NODE_SIZE; i++){if (s->data[i] == NULL_DATA){s->data[i] = x;//(*ht)[index] = *s;return;}}p = s;s = s->next; }s=new bucket_node;p->next= s;for(int j = 0; j<BUCKET_NODE_SIZE; ++j){s->data[j] = NULL_DATA;}    s->next = NULL;for (int i = 0; i < BUCKET_NODE_SIZE;i++)if (s->data[i] == NULL_DATA){s->data[i] = x;return;}}void main(){InitHashTable(&hash_table);int ar[] = {8,15,22,29,36,43,50,7,14,21,28,35,42,49,56,63,70,25,30};for(int i=0; i<sizeof(ar)/sizeof(int); ++i){insert_new_element(&hash_table,ar[i]);}}

0 0
原创粉丝点击