/#include "iostream.h"
創(chuàng)新互聯(lián)是專業(yè)的茶陵網(wǎng)站建設公司,茶陵接單;提供成都網(wǎng)站建設、成都做網(wǎng)站,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行茶陵網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
#include iostream
#include "string.h"
#include "fstream"
#define NULL 0
unsigned int key;
unsigned int key2;
int *p;
struct node //建節(jié)點
{
char name[8],address[20];
char num[11];
node * next;
};
typedef node* pnode;
typedef node* mingzi;
node **phone;
node **nam;
node *a;
using namespace std; //使用名稱空間
void hash(char num[11]) //哈希函數(shù)
{
int i = 3;
key=(int)num[2];
while(num[i]!=NULL)
{
key+=(int)num[i];
i++;
}
key=key%20;
}
void hash2(char name[8]) //哈希函數(shù)
{
int i = 1;
key2=(int)name[0];
while(name[i]!=NULL)
{
key2+=(int)name[i];
i++;
}
key2=key2%20;
}
node* input() //輸入節(jié)點
{
node *temp;
temp = new node;
temp-next=NULL;
cout"輸入姓名:"endl;
cintemp-name;
cout"輸入地址:"endl;
cintemp-address;
cout"輸入電話:"endl;
cintemp-num;
return temp;
}
int apend() //添加節(jié)點
{
node *newphone;
node *newname;
newphone=input();
newname=newphone;
newphone-next=NULL;
newname-next=NULL;
hash(newphone-num);
hash2(newname-name);
newphone-next = phone[key]-next;
phone[key]-next=newphone;
newname-next = nam[key2]-next;
nam[key2]-next=newname;
return 0;
}
void create() //新建節(jié)點
{
int i;
phone=new pnode[20];
for(i=0;i20;i++)
{
phone[i]=new node;
phone[i]-next=NULL;
}
}
void create2() //新建節(jié)點
{
int i;
nam=new mingzi[20];
for(i=0;i20;i++)
{
nam[i]=new node;
nam[i]-next=NULL;
}
}
void list() //顯示列表
{
int i;
node *p;
for(i=0;i20;i++)
{
p=phone[i]-next;
while(p)
{
coutp-name'_'p-address'_'p-numendl;
p=p-next;
}
}
}
void list2() //顯示列表
{
int i;
node *p;
for(i=0;i20;i++)
{
p=nam[i]-next;
while(p)
{
coutp-name'_'p-address'_'p-numendl;
p=p-next;
}
}
}
void find(char num[11]) //查找用戶信息
{
hash(num);
node *q=phone[key]-next;
while(q!= NULL)
{
if(strcmp(num,q-num)==0)
break;
q=q-next;
}
if(q)
coutq-name"_" q-address"_"q-numendl;
else cout"無此記錄"endl;
}
void find2(char name[8]) //查找用戶信息
{
hash2(name);
node *q=nam[key2]-next;
while(q!= NULL)
{
if(strcmp(name,q-name)==0)
break;
q=q-next;
}
if(q)
coutq-name"_" q-address"_"q-numendl;
else cout"無此記錄"endl;
}
void save() //保存用戶信息
{
int i;
node *p;
for(i=0;i20;i++)
{
p=phone[i]-next;
while(p)
{
fstream iiout("out.txt", ios::out);
iioutp-name"_"p-address"_"p-numendl;
p=p-next;
}
}
}
void menu() //菜單
{
cout"0.添加記錄"endl;
cout"3.查找記錄"endl;
cout"2.姓名散列"endl;
cout"4.號碼散列"endl;
cout"5.清空記錄"endl;
cout"6.保存記錄"endl;
cout"7.退出系統(tǒng)"endl;
}
int main()
{
char num[11];
char name[8];
create();
create2() ;
int sel;
while(1)
{
menu();
cinsel;
if(sel==3)
{ cout"9號碼查詢,8姓名查詢"endl;
int b;
cinb;
if(b==9)
{ cout"請輸入電話號碼:"endl;
cin num;
cout"輸出查找的信息:"endl;
find(num);
}
else
{ cout"請輸入姓名:"endl;
cin name;
cout"輸出查找的信息:"endl;
find2(name);}
}
if(sel==2)
{ cout"姓名散列結(jié)果:"endl;
list2();
}
if(sel==0)
{ cout"請輸入要添加的內(nèi)容:"endl;
apend();
}
if(sel==4)
{ cout"號碼散列結(jié)果:"endl;
list();
}
if(sel==5)
{ cout"列表已清空:"endl;
create();
create2();
}
if(sel==6)
{ cout"通信錄已保存:"endl;
save();
}
if(sel==7) return 0;
}
return 0;
}
應該是這個意思:
第一次沖突就是散列的位置+1,這次發(fā)生沖突了就繼續(xù)第二次
第二次用的是平方取中,55^2= 3025,當然第二次沖突的RH2就是02了,答案(2)
#includestdio.h
int?main(){
char?s[256];
char?*p;
unsigned?long?long?int?h?=?0;
scanf("%s",?s);
for(p=s;?*p;?p++){
h?=?h*31?+?*p;
}
printf("%llu",?h);
}