欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

c語言散列函數(shù)實(shí)現(xiàn)代碼 散列函數(shù)的算法

數(shù)據(jù)結(jié)構(gòu) 哈希表,C語言解答

#include stdio.h

創(chuàng)新互聯(lián)主要從事網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)平度,十年網(wǎng)站建設(shè)經(jīng)驗(yàn),價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575

#includemalloc.h槐虧察

#includestring.h

//#include

#define HASH_LEN 50 //哈希表的長度

#define M 47

#define NAME_NO 30 //人名的個數(shù)

typedef struct NAME

{

char *py; //名字的拼音

int k; //拼音所對應(yīng)的整數(shù)

}NAME;

NAME NameList[HASH_LEN];

typedef struct hterm //哈希表

{

char *py; //名字的拼音

int k; //拼音所對應(yīng)的整數(shù)

int si; //查找長度

}HASH;

HASH HashList[HASH_LEN];

/*-----------------------姓名(結(jié)構(gòu)體數(shù)組)初始化---------------------------------*/

void InitNameList()

{ int i;

char *f;

int r,s0;

NameList[0].py="chenghongxiu";

NameList[1].py="yuanhao";

NameList[2].py="yangyang";

NameList[3].py="zhanghen";

NameList[4].py="chenghongxiu";

NameList[5].py="xiaokai";

NameList[6].py="liupeng";

NameList[7].py="shenyonghai";

NameList[8].py="chengdaoquan";

NameList[9].py="ludaoqing";

NameList[10].py="gongyunxiang";

NameList[11].py="sunzhenxing";

NameList[12].py="sunrongfei";

NameList[13].py="sunminglong";

NameList[14].py="空蘆zhanghao";

NameList[15].py="tianmiao";

NameList[16].py="yaojianzhong";

NameList[17].py="yaojianqing";

NameList[18].py="yaojianhua";

NameList[19].py="yaohaifeng";

NameList[20].py="chengyanhao";

NameList[21].py="yaoqiufeng";

NameList[22].py="qianpengcheng";

NameList[23].py="yaohaifeng";

NameList[24].py="bianyan";

NameList[25].py="linglei";

NameList[26].py="fuzhonghui";

NameList[27].py="huanhaiyan";

NameList[28].py="liudianqin";

NameList[29].py="wangbinnian";

for (i=0;iNAME_NO;i++)// *求出各個姓名的拼音所對應(yīng)的整數(shù)

{

s0=0;

f=NameList[i].py;

for (r=0;*(f+r) != '\0';r++) //方法:將字符串的各個字符所對應(yīng)的ASCII碼相加,所得的整數(shù)做為哈鉛茄希表的關(guān)鍵字

s0=*(f+r)+s0;

NameList[i].k=s0;

}

}

/*-----------------------建立哈希表---------------------------------*/

void CreateHashList()

{int i;

for ( i=0; iHASH_LEN;i++)//哈希表的初始化

{

HashList[i].py="";

HashList[i].k=0;

HashList[i].si=0;

}

for (i=0; iNAME_NO;)

{

int sum=0;

int adr=(NameList[i].k) % M; //哈希函數(shù)

int d=adr;

if(HashList[adr].si==0) //如果不沖突

{

HashList[adr].k=NameList[i].k;

HashList[adr].py=NameList[i].py;

HashList[adr].si=1;

}

else //沖突

{

do

{

d=(d+((NameList[i].k))%10+1)%M; //偽散列

sum=sum+1; //查找次數(shù)加1

}while (HashList[d].k!=0);

HashList[d].k=NameList[i].k;

HashList[d].py=NameList[i].py;

HashList[d].si=sum+1;

}i++;

}

}

/*-------------------------------------查找------------------------------------*/

void FindList()

{ int r;

char name[20]={0};

int s0=0;

int sum=1;

int adr;

int d;

printf("\n\n請輸入姓名的拼音: "); //輸入姓名

scanf("%s",name);

for ( r=0;r20;r++) //求出姓名的拼音所對應(yīng)的整數(shù)(關(guān)鍵字)

s0+=name[r];

adr=s0 % M; //使用哈希函數(shù)

d=adr;

if(HashList[adr].k==s0) //分3種情況進(jìn)行判斷

printf("\n姓名:%s 關(guān)鍵字:%d 查找長度為: 1",HashList[d].py,s0);

else if (HashList[adr].k==0)

printf("無該記錄!");

else

{

int g=0;

do

{

d=(d+s0%10+1)%M; //偽散列

sum=sum+1;

if (HashList[d].k==0)

{

printf("無記錄! ");

g=1;

}

if (HashList[d].k==s0)

{

printf("\n姓名:%s 關(guān)鍵字:%d 查找長度為:%d",HashList[d].py,s0,sum);

g=1;

}

}while(g==0);

}

}

/*--------------------------------顯示哈希表----------------------------*/

void Display()

{int i;

float average=0;

printf("\n\n地址\t關(guān)鍵字\t\t搜索長度\tH(key)\t\t拼音 \n"); //顯示的格式

for( i=0; i15; i++)

{

printf("%d ",i);

printf("\t%d ",HashList[i].k);

printf("\t\t%d ",HashList[i].si);

printf("\t\t%d ",(HashList[i].k)%M);

printf("\t %s ",HashList[i].py);

printf("\n");

}

// printf("按任意鍵繼續(xù)顯示...\n"); //由于數(shù)據(jù)比較多,所以分屏顯示(以便在Win9x/DOS下能看到所有的數(shù)據(jù))

// getch();

for( i=15; i30; i++)

{

printf("%d ",i);

printf("\t%d ",HashList[i].k);

printf("\t\t%d ",HashList[i].si);

printf("\t\t%d ",(HashList[i].k)%M);

printf("\t %s ",HashList[i].py);

printf("\n");

}

// printf("按任意鍵繼續(xù)顯示...\n");

// getch();

for( i=30; i40; i++)

{

printf("%d ",i);

printf("\t%d ",HashList[i].k);

printf("\t\t%d ",HashList[i].si);

printf("\t\t%d ",(HashList[i].k)%M);

printf("\t %s ",HashList[i].py);

printf("\n");

}

//printf("按任意鍵繼續(xù)顯示...\n");

//getch();

for( i=40; i50; i++)

{

printf("%d ",i);

printf("\t%d ",HashList[i].k);

printf("\t\t%d ",HashList[i].si);

printf("\t\t%d ",(HashList[i].k)%M);

printf("\t %s ",HashList[i].py);

printf("\n");

}

for (i=0;iHASH_LEN;i++)

{average+=HashList[i].si;

average/=NAME_NO;

printf("\n\n平均查找長度:ASL(%d)=%f \n\n",NAME_NO,average);

}

}

/*--------------------------------主函數(shù)----------------------------*/

void main()

{

/* ::SetConsoleTitle("哈希表操作"); //Windows API函數(shù),設(shè)置控制臺窗口的標(biāo)題

HANDLE hCon = ::GetStdHandle(STD_OUTPUT_HANDLE); //獲得標(biāo)準(zhǔn)輸出設(shè)備的句柄

::SetConsoleTextAttribute(hCon, 10|0); //設(shè)置文本顏色

*/

printf("\n------------------------哈希表的建立和查找----------------------");

InitNameList();

CreateHashList ();

while(1)

{ char ch1;

printf("\n\n");

printf(" 1. 顯示哈希表\n");

printf(" 2. 查找\n");

printf(" 3. 退出\n");

err:

scanf("%c",ch1);

if (ch1=='1')

Display();

else if (ch1=='2')

FindList();

else if (ch1=='3')

return;

else

{

printf("\n請輸入正確的選擇!");

goto err;

}

}

}

名稱欄目:c語言散列函數(shù)實(shí)現(xiàn)代碼 散列函數(shù)的算法
URL網(wǎng)址:http://chinadenli.net/article3/dshojos.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google手機(jī)網(wǎng)站建設(shè)做網(wǎng)站網(wǎng)站排名小程序開發(fā)建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計(jì)公司