版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
實驗一.線性表逆置:一.問題描述
分別以不同存儲結(jié)構(gòu)實現(xiàn)線性表的就地逆置。線性表的就地逆置就是在原表的存儲空間內(nèi)將線性表(a1,a2,a3,……an)〔an,an-1,……a2,a1).二.基本要求用順序存儲結(jié)構(gòu)實現(xiàn)線性表的就地逆置,并將結(jié)果輸出。三.數(shù)據(jù)結(jié)構(gòu)的設(shè)計:
由于線性表在內(nèi)存中是線性存儲的,故設(shè)計其數(shù)據(jù)結(jié)構(gòu)類型如下:structwork{
chara:
structwork*next;}說明:由于本實驗重在算法的實現(xiàn),故將線性表設(shè)計的很簡單,以便于操作.四.函數(shù)說明:1.函數(shù)revers(structwork*head):功能說明:實現(xiàn)線性表在內(nèi)存中的逆置.算法設(shè)計:首先在函數(shù)中定義與線性表相同數(shù)據(jù)結(jié)構(gòu)的指針p,q,s.然后讓p和s都指向從形參獲取的線性表頭指針head,讓q作為p的后繼指針指向p->next,
此時就可以讓第一個節(jié)點分離出來,即讓s->next=NULL.接下來一個循環(huán)是真正實現(xiàn)線性表的逆置;最后讓參數(shù)head指向逆置后的表頭,然后做為返回值返回.2.函數(shù)print(structwork*head):功能說明:從屏幕依次輸出線性表的成員.算法設(shè)計:定義一個結(jié)構(gòu)體指針,并讓它賦值為從形參傳來的頭指針,即讓它指向線性表的頭節(jié)點;接下來一個循環(huán)是依次輸出線性表的成員,并讓p向后移位,即p=p->next,直至p為空指針,退出循環(huán).五.具體設(shè)計:
1.函數(shù)revers():代碼如下:structwork*revers(structwork*head){structwork*p,*q,*s;
/*定義指針變量,用于逆置轉(zhuǎn)換*/p=head;s=head;q=p->next;s->next=NULL;
/*先讓第一個節(jié)點斷開*/while(q){
p=q;
/*讓p后移*/
q=q->next;
/*p也后移*/
p->next=s;
/*s起中間作用*/
s=p;}head=p;
/*讓head當(dāng)頭指針*/returnhead;}2.print函數(shù):代碼如下:voidprint(structwork*head)
{
structwork*p;
/*定義結(jié)構(gòu)體指針*/
p=head;
/*讓p指向線性表的頭節(jié)點*/
while(p!=NULL)
/*循環(huán)開始*/
{
printf("%c",p->a);
p=p->next;
/*讓p后移*/
}
printf("\n");
}
3.main()函數(shù):
代碼如下:intmain(){structwork*run;
/*定義結(jié)構(gòu)體變量run用于執(zhí)行函數(shù)*/structwork*pointer1,*pointer2,*head;/*結(jié)構(gòu)體指針用于創(chuàng)建線性表*/pointer1=pointer2=(structwork*)malloc(length);/*以下為線性表的創(chuàng)建*/scanf("%c",&pointer1->a);head=NULL;while(pointer1->a!='0'){if(head==NULL)head=pointer1;elsepointer2->next=pointer1;pointer2=pointer1;pointer1=(structwork*)malloc(length);scanf("%c",&pointer1->a);}pointer2->next=NULL;
/*線性表創(chuàng)建結(jié)束*/printf("逆置前:\n");print(head);
/*屏幕輸出*/run=revers(head);
/*執(zhí)行逆置函數(shù)*/printf("逆置后:\n");print(run);
/*屏幕輸出*/return0;}程序如下:#include<stdio.h>#include<malloc.h>#definelengthsizeof(structwork)structwork{chara;structwork*next;};structwork*revers(structwork*head){structwork*p,*q,*s;p=head;s=head;q=p->next;s->next=NULL;while(q){
p=q;
q=q->next;
p->next=s;
s=p;}head=p;returnhead;}voidprint(structwork*head)
{
structwork*p;
p=head;
while(p!=NULL)
{
printf("%c",p->a);
p=p->next;
}
printf("\n");
}intmain(){
structwork*run;
structwork*pointer1,*pointer2,*head;
pointer1=pointer2=(structwork*)malloc(length);
scanf("%c",&pointer1->a);
head=NULL;
while(pointer1->a!='0')
{
if(head==NULL)head=pointer1;
elsepointer2->next=pointer1;
pointer2=pointer1;
pointer1=(structwork*)malloc(length);
scanf("%c",&pointer1->a);
}
pointer2->next=NULL;printf("逆置前:\n");
print(head);run=revers(head);printf("逆置后:\n");print(run);return0;}運行如下:六.實驗總結(jié):線性表逆置是看似比較簡單的實驗,然而卻需認(rèn)真思考細(xì)心操作,不然易出錯。實驗二.哈希表設(shè)計:問題描述:針對某個集體(比如你所在的班級)中的“人名”設(shè)計一個哈希表,使得平均查找長度不超過R,完成相應(yīng)的建表和查表程序。基本要求:假設(shè)人名為中國人姓名的漢語拼音形式。待填入哈希表的人名共有30個,取平均查找長度的上限位。哈希函數(shù)用除留余數(shù)法構(gòu)造,用線性探測再散列法處理沖突。三.程序如下:#include<stdio.h>
#include<conio.h>
#include<ctype.h>
#defineL50/*定義哈希表長*/
#defineM47/*定義p值*/
#defineN30/*定義名單長*/
charz[22];
structold{char*name;char*py;intk;};
structoldoldlist[L];/*原始表*/
structhterm
{char*name;char*py;
intk;intsi;
};
structhtermhlist[L];/*哈希表*/
inti,adr,sum,d;
charch1;
floataverage;
/**********************************/
voidchash()
{for(i=0;i<L;i++)
{hlist[i].name="";
hlist[i].py="";
hlist[i].k=0;
hlist[i].si=0;
};
for(i=0;i<N;i++)
{sum=0;
adr=(oldlist[i].k)%M;
d=adr;
if(hlist[adr].si==0)
{hlist[adr].k=oldlist[i].k;
hlist[adr].name=oldlist[i].name;
hlist[adr].py=oldlist[i].py;
hlist[adr].si=1;
}
else
{do
{d=(d+((oldlist[i].k))%10+1)%M;/*偽隨機(jī)*/
sum=sum+1;
}
while(hlist[d].k!=0);
hlist[d].k=oldlist[i].k;
hlist[d].name=oldlist[i].name;
hlist[d].py=oldlist[i].py;
hlist[d].si=sum+1;
}
}
}
/***************************************/
voidfindhlist()
{ints0;charr,g;
clrscr();/*清屏*/
for(r=0;r<20;r++){z[r]=0;};
gotoxy(1,1);printf("RESEARCH.....");
gotoxy(5,10);printf("inputthespellofname:");
gotoxy(5,12);scanf("%s",z);
s0=0;
for(r=0;r<20;r++){s0=z[r]+s0;};
gotoxy(5,13);printf("%d",s0);
/*for(i=0;i<L;i++)*/
sum=1;
adr=s0%M;
d=adr;
if(hlist[adr].k==s0)
{
gotoxy(18,18);printf("");
gotoxy(18,18);printf("%s",hlist[d].name);
gotoxy(18,19);printf("%s",hlist[d].py);
gotoxy(18,20);
printf("find%dtimes",sum);
getch();
}
else
{if(hlist[adr].k==0)
{gotoxy(18,18);
printf("nothingaboutit!");
getch();
}
else
{g=0;
for(i=0;g==0;i++)
{d=(d+s0%10+1)%M;/*偽隨機(jī)*/
sum=sum+1;
if(hlist[d].k==0)
{gotoxy(18,18);
printf("nothingaboutit!");
g=1;getch();
};
gotoxy(18,18);
printf("%s",hlist[d].name);
gotoxy(18,19);
printf("%s",hlist[d].py);
gotoxy(18,20);
printf("find%dtimes",sum);
getch();
if(hlist[d].k==s0)
{g=1;
gotoxy(18,21);
printf("find%dtimesuntilsuccess!",sum);
getch();
};
};
};
};
}
/***************************************/
voidinp()/*輸入表*/
{
char*f;
intr,s0;
oldlist[0].name="A";oldlist[0].py="apple";
oldlist[1].name="B";oldlist[1].py="bus";
oldlist[2].name="C";oldlist[2].py="cat";
oldlist[3].name="D";oldlist[3].py="dog";
oldlist[5].name="E";oldlist[5].py="egg";
oldlist[6].name="F";oldlist[6].py="fly";
oldlist[7].name="G";oldlist[7].py="good";
oldlist[8].name="H";oldlist[8].py="hurt";
oldlist[9].name="I";oldlist[9].py="int";
oldlist[10].name="J";oldlist[10].py="joy";
oldlist[11].name="K";oldlist[11].py="keep";
oldlist[12].name="L";oldlist[12].py="long";
oldlist[13].name="M";oldlist[13].py="make";
oldlist[14].name="N";oldlist[14].py="net";
oldlist[15].name="O";oldlist[15].py="out";
oldlist[16].name="P";oldlist[16].py="pour";
oldlist[17].name="Q";oldlist[17].py="queen";
oldlist[18].name="R";oldlist[18].py="run";
oldlist[19].name="S";oldlist[19].py="sun";
oldlist[20].name="T";oldlist[20].py="tea";
oldlist[21].name="U";oldlist[21].py="until";
oldlist[22].name="V";oldlist[22].py="vection";
oldlist[23].name="W";oldlist[23].py="water";
oldlist[24].name="X";oldlist[24].py="xray";
oldlist[25].name="Y";oldlist[25].py="you";
oldlist[26].name="Z";oldlist[26].py="zoo";
oldlist[27].name="AA";oldlist[27].py="aah";
oldlist[28].name="BB";oldlist[28].py="bbc";
oldlist[29].name="CC";oldlist[29].py="cch";
/*請在此輸入數(shù)據(jù),同時修改程序開頭的MLN*/
for(i=0;i<N;i++)
{
s0=0;
f=oldlist[i].py;
for(r=0;*(f+r)!='\0';r++){s0=*(f+r)+s0;};
oldlist[i].k=s0;
};
}
/****************************************/
voiddhash()/*顯示哈希表*/
{charLON=17;
clrscr();
if(LON>L){LON=L;};
gotoxy(1,1);printf("HashTable:");
gotoxy(1,2);printf("address:");
for(i=0;i<LON;i++)
{gotoxy(1,i+3);
printf("%-3d",i);
};
gotoxy(9,2);printf("theH(key)is:");
for(i=0;i<LON;i++)
{gotoxy(10,i+3);
printf("%-6d",hlist[i].k);
};
gotoxy(19,2);printf("name:");
for(i=0;i<LON;i++)
{gotoxy(19,3+i);
printf("%s",hlist[i].name);
};
gotoxy(28,2);printf("spell:");
for(i=0;i<LON;i++)
{gotoxy(28,i+3);
printf("%s",hlist[i].py);
};
gotoxy(40,2);printf("thelength:");
for(i=0;i<LON;i++)
{gotoxy(43,i+3);
printf("%2d",hlist[i].si);
};
gotoxy(53,2);printf("H(key):");
for(i=0;i<LON;i++)
{gotoxy(53,i+3);
printf("%2d",(hlist[i].k)%M);
};
average=0;
for(i=0;i<L;i++)
{average=average+hlist[i].si;};
average=average/N;
gotoxy(10,23);
printf("ASL:ASL(%d)=%f",N,average);
gotoxy(20,24);
printf("anykeytopass");
ch1=getch();
if(L>15)
{
clrscr();
if(LON>L-15){LON=L-15;};
gotoxy(1,1);printf("HashTable:");
gotoxy(1,2);printf("address:");
for(i=0;i<LON;i++)
{gotoxy(1,i+3);
printf("%-3d",i+15);
};
gotoxy(9,2);printf("theH(key)is:");
for(i=0;i<LON;i++)
{gotoxy(10,i+3);
printf("%-6d",hlist[i+15].k);
};
gotoxy(19,2);printf("name:");
for(i=0;i<LON;i++)
{gotoxy(19,3+i);
printf("%s",hlist[i+15].name);
};
gotoxy(28,2);printf("spell:");
for(i=0;i<LON;i++)
{gotoxy(28,i+3);
printf("%s",hlist[i+15].py);
};
gotoxy(40,2);printf("thelength:");
for(i=0;i<LON;i++)
{gotoxy(43,i+3);
printf("%2d",hlist[i+15].si);
};
gotoxy(53,2);printf("H(key):");
for(i=0;i<LON;i++)
{gotoxy(53,i+3);
printf("%2d",(hlist[i+15].k)%M);
};
average=0;
for(i=0;i<L;i++)
{average=average+hlist[i].si;};
average=average/N;
gotoxy(10,23);
printf("ASL:ASL(%d)=%f",N,average);
gotoxy(20,24);
printf("anykeytopass");
ch1=getch();
};
if(L>30)
{
clrscr();
if(LON>L-30){LON=L-30;};
gotoxy(1,1);printf("HashTable:");
gotoxy(1,2);printf("address:");
for(i=0;i<LON;i++)
{gotoxy(1,i+3);
printf("%-3d",i+30);
};
gotoxy(9,2);printf("theH(key)is:");
for(i=0;i<LON;i++)
{gotoxy(10,i+3);
printf("%-6d",hlist[i+30].k);
};
gotoxy(19,2);printf("name:");
for(i=0;i<LON;i++)
{gotoxy(19,3+i);
printf("%s",hlist[i+30].name);
};
gotoxy(28,2);printf("spell:");
for(i=0;i<LON;i++)
{gotoxy(28,i+3);
printf("%s",hlist[i+30].py);
};
gotoxy(40,2);printf("thelength:");
for(i=0;i<LON;i++)
{gotoxy(43,i+3);
printf("%2d",hlist[i+30].si);
};
gotoxy(53,2);printf("H(key):");
for(i=0;i<LON;i++)
{gotoxy(53,i+3);
printf("%2d",(hlist[i+30].k)%M);
};
average=0;
for(i=0;i<L;i++)
{average=average+hlist[i].si;};
average=average/N;
gotoxy(10,23);
printf("ASL:ASL(%d)=%f",N,average);
gotoxy(20,24);
printf("anykeytopass");
ch1=getch();
};
if(L>45)
{
clrscr();
if(LON>L-45){LON=L-45;};
gotoxy(1,1);printf("HashTable:");
gotoxy(1,2);printf("address:");
for(i=0;i<LON;i++)
{gotoxy(1,i+3);
printf("%-3d",i+45);
};
gotoxy(9,2);printf("theH(key)is:");
for(i=0;i<LON;i++)
{gotoxy(10,i+3);
printf("%-6d",hlist[i+45].k);
};
gotoxy(19,2);printf("name:");
for(i=0;i<LON;i++)
{gotoxy(19,3+i);
printf("%s",hlist[i+45].name);
};
gotoxy(28,2);printf("spell:");
for(i=0;i<LON;i++)
{gotoxy(28,i+3);
printf("%s",hlist[i+45].py);
};
gotoxy(40,2);printf("thelength:");
for(i=0;i<LON;i++)
{gotoxy(43,i+3);
printf("%2d",hlist[i+45].
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年短周期地震計合作協(xié)議書
- 2024年干部休養(yǎng)所服務(wù)項目合作計劃書
- 2023年儲藏盒項目需求分析報告
- 2023年高性能功能陶瓷結(jié)構(gòu)陶瓷項目評估分析報告
- Academic English Reading and Writing學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 2024年小型高效沼氣裝置合作協(xié)議書
- 2024年片式半導(dǎo)體器件項目合作計劃書
- 2024年運載火箭貯箱項目建議書
- 2024年18-萘內(nèi)酰亞胺項目建議書
- 外派員工與駐外工作管理制度
- 湘教版八年級上冊數(shù)學(xué)期中考試試卷及答案
- 循證醫(yī)學(xué)智慧樹知到答案2024年浙江中醫(yī)藥大學(xué)
- MBA考試《英語》歷年真題和解析答案
- 中國普通食物營養(yǎng)成分表(修正版)
- 中醫(yī)護(hù)理進(jìn)修總結(jié)匯報
- 統(tǒng)編版(2024新版)七年級上冊道德與法治學(xué)科教學(xué)計劃
- GB/T 44206-2024館藏文物病害數(shù)據(jù)庫建設(shè)規(guī)范
- 江蘇省建筑與裝飾工程計價定額(2014)電子表格版
- 陪診項目商業(yè)計劃書
- 心臟康復(fù)指南完整版
評論
0/150
提交評論