資源描述:
《2014廣工數(shù)據(jù)結(jié)構(gòu)實驗報告哈希表》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、數(shù)據(jù)結(jié)構(gòu)設(shè)計性實驗報告課程名稱_數(shù)據(jù)結(jié)構(gòu)實驗_題目名稱哈希衷學(xué)生學(xué)院計算機學(xué)院專業(yè)班級學(xué)號學(xué)生姓名指導(dǎo)教師2015年7月2日1?題目采用哈希表為存儲結(jié)構(gòu),實現(xiàn)抽象數(shù)據(jù)類型HashTablecADTHAS{數(shù)據(jù)對象D:D是具有相同特性的數(shù)據(jù)元素的集合。數(shù)據(jù)關(guān)系R:根據(jù)設(shè)定的哈希蚋數(shù)和處理沖突的方法將一組關(guān)鍵字映像到一個連續(xù)的有限地址集上,并以關(guān)鍵字在地址集中的“像”作為記錄在表中的存儲位置,這種表稱為哈希表。這一映像過程稱為造表或散列,所得存儲位置稱哈希地址或散列地址?;静僮鳎篒nitHash(&H)操作結(jié)果:初始化哈希表H。DestoyHash(&H)初始條件:哈希表H已存在。操作結(jié)
2、果:銷毀哈希表H。CreateHash(&H)初始條件:哈希表H己存在。操作結(jié)果:構(gòu)造哈希表H。SearchHash(H)初始條件:哈希表已存在。操作結(jié)果:查找哈希表H屮元素。InsertHash(&H)初始條件:哈希表H已存在。操作結(jié)果:插入元素到哈希表DeleteHash(&HZkey,&e)初始條件:哈希表己存在且非空。操作結(jié)果:刪除H的第i個元素,并用e返回其值,H的長度減1。}ADTList3.算法設(shè)計^include#include#include#include#include#d
3、efinerandom(x)(rand()%x)#defineOK1#defineSUCCESS1#defineUNSUCCESS0#defineDUPLICAPE-1#defineOVERFLOW0typedefintKeyType;typedefintStatus;typedefstruct{KeyTypekey;inttag;}RecordrdType,RcdType;typedefstruct{RcdType*rcd;intsize;intcount;JHashTable;intInitHash(HashTable*H,intsize){//初始化哈希表inti;H->rcd=
4、(RcdType*)malloc(size*sizeof(RcdType));if(NULL==H->rcd)returnOVERFLOW;for(i=0;i<=size;i++)H->rcd[i].tag=0;H-〉size=size;H->count=0;returnOK;}intDestoyHash(HashTable*H)//銷毀哈希表{free(H->rcd);H->rcd=NULL;H->count=0;H->size=0;returnOK;}intSearchHash(HashTableH,KeyTypekey,int&p,int&c){//S找哈希表c=0;p=key%
5、H.size;//求得哈希地址while(H.rcd[p].tag!=0&&(H.rcd[p].key!=key
6、
7、-1==H.rcd[p].tag)){p=(p+1)%H.size;c++;}//求得下一探測地址if(H.rcdfpl.key==key)returnSUCCESS;elsereturnUNSUCCESS;}intInsertHash(HashTable*H,RcdTypee){//哈祐表的插入intc=O,j;if(SUCCESS==SearchHash(*H,e.key,j,c))return-1;else{H->rcd
8、jJ=e;H->rcdlj).tag=l;+
9、+H->count;returnc;}}intDeleteHash(HashTable*H,KeyTypekey,RcdTypee){//哈希表的刪除intj,c;if(UNSUCCESS==SearchHash(*H,key,j,c))returnUNSUCCESS;else{e=H->rcd[jJ;H-〉rcd[jl.tag=-l;H->count—;returnSUCCESS;}}voiddi$play(Ha$hTable*H){printf("哈希表數(shù)據(jù)for(inti=1;icount;i++){printf(H%dn,H->rcd[il);)printf(H
10、");}4.測試intmain(){intij,select,xl,x2,x3,x4,g,n,k,b,f;RcdTypee;KeyTypekey;srand(time(O));//初始化隨機種子HashTableH;InitHash(&H,9);for(i=l;i<=10;i++){e.tag=l;e.key=random(50);InsertHash(&H,e);}printf(""dodisplay(&H);printfC'sele