哈希冲突400分

来源:百度知道 编辑:UC知道 时间:2024/05/31 23:23:39
void hash(char num[11]) //号码哈希函数
{
int i = 3;
key=(int)num[2];

while(num[i]!=NULL)
{
key+=(int)num[i];
i++;
}
key=key%20;
}
void hash2(char name[8]) //姓名哈希函数
{
int i = 1;
key2=(int)name[0];

while(name[i]!=NULL)
{
key2+=(int)name[i];
i++;
}
key2=key2%20;
}

这是用线性探测在散列解决冲突
要求改变解决冲突方法,比如用二次探测在散列
伪随机探测再散列等

在线等 这里200分 回答了去下面地址再给200分
一个问题
http://zhidao.baidu.com/question/80809891.html
源程序在这里http://zhidao.baidu.com/question/29808025.html
liujq007 你答的对啊 后来发现我说的是求关键字的 并不是解决冲突的方法
还忘大侠指条明路 给我换一种解决冲突的方法吧

代码我已经看过了,你所说的并不是线性探测法,而应该是处理溢出的开散列方法——“链地址法”,而且体现这一方法的地方应该是int apend()函数中,

hash(newphone->num); //先计算号码的KEY
hash2(newname->name); //key2
newphone->next = phone[key]->next; //把该KEY的号码链接到原来的号码的后一节点上
phone[key]->next=newphone;
newname->next = nam[key2]->next;
nam[key2]->next=newname;

#include "iostream"
#include "string"
#include "fstream"
using namespace std;
#define NULL 0
unsigned int key;
unsigned int key2;

int *p;
struct node //建节点
{
char name[8],address[20];
char num[11];
node * next;
};
typedef node* pnode;
typedef node* mingzi;
node **phone;
node **nam;
node *a;

void hash(char num[11]) //哈希函数
{
int i = 3;
key=(int)num[2];

while(num[i]!=NULL)
{
key+=(int)num[i];
i++;
}
key=key%20;
}