数据结构课程设计实验报告E10914060 刘晨晨.docx
- 文档编号:11152098
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:18
- 大小:54.21KB
数据结构课程设计实验报告E10914060 刘晨晨.docx
《数据结构课程设计实验报告E10914060 刘晨晨.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计实验报告E10914060 刘晨晨.docx(18页珍藏版)》请在冰豆网上搜索。
数据结构课程设计实验报告E10914060刘晨晨
实验一.线性表逆置:
一.问题描述
分别以不同存储结构实现线性表的就地逆置。
线性表的就地逆置就是在原表的存储空间内将线性表(a1,a2,a3,……an)〔an,an-1,……a2,a1).
二.基本要求
用顺序存储结构实现线性表的就地逆置,并将结果输出。
三.数据结构的设计:
由于线性表在内存中是线性存储的,故设计其数据结构类型如下:
structwork
{
chara:
structwork*next;
}
说明:
由于本实验重在算法的实现,故将线性表设计的很简单,以便于操作.
四.函数说明:
1.函数revers(structwork*head):
功能说明:
实现线性表在内存中的逆置.
算法设计:
首先在函数中定义与线性表相同数据结构的指针p,q,s.然后让p和s都指向从形参获取的线性表头指针head,让q作为p的后继指针指向p->next,
此时就可以让第一个节点分离出来,即让s->next=NULL.接下来一个循环是真正实现线性表的逆置;最后让参数head指向逆置后的表头,然后做为返回值返回.
2.函数print(structwork*head):
功能说明:
从屏幕依次输出线性表的成员.
算法设计:
定义一个结构体指针,并让它赋值为从形参传来的头指针,即让它指向线性表的头节点;接下来一个循环是依次输出线性表的成员,并让p向后移位,即p=p->next,直至p为空指针,退出循环.
五.具体设计:
1.函数revers():
代码如下:
structwork*revers(structwork*head)
{
structwork*p,*q,*s; /*定义指针变量,用于逆置转换*/
p=head;
s=head;
q=p->next;
s->next=NULL; /*先让第一个节点断开*/
while(q)
{
p=q; /*让p后移*/
q=q->next; /*p也后移*/
p->next=s; /*s起中间作用*/
s=p;
}
head=p; /*让head当头指针*/
returnhead;
}
2.print函数:
代码如下:
voidprint(structwork*head)
{
structwork*p; /*定义结构体指针*/
p=head; /*让p指向线性表的头节点*/
while(p!
=NULL) /*循环开始*/
{
printf("%c",p->a);
p=p->next; /*让p后移*/
}
printf("\n");
}
3.main()函数:
代码如下:
intmain()
{structwork*run; /*定义结构体变量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;
}
程序如下:
#include
#include
#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;
}
运行如下:
六.实验总结:
线性表逆置是看似比较简单的实验,然而却需认真思考细心操作,不然易出错。
实验二.哈希表设计:
一.问题描述:
针对某个集体(比如你所在的班级)中的“人名”设计一个哈希表,使得平均查找长度不超过R,完成相应的建表和查表程序。
二.基本要求:
假设人名为中国人姓名的汉语拼音形式。
待填入哈希表的人名共有30个,取平均查找长度的上限位。
哈希函数用除留余数法构造,用线性探测再散列法处理冲突。
三.程序如下:
#include
#include
#include
#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 {hlist[i].name=""; hlist[i].py=""; hlist[i].k=0; hlist[i].si=0; }; for(i=0;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;/*伪随机*/ 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 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;/*伪随机*/ 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"; /*请在此输入数据,同时修改程序开头的MLN*/ for(i=0;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 {gotoxy(1,i+3); printf("%-3d",i); }; gotoxy(9,2);printf("theH(key)is: "); for(i=0;i {gotoxy(10,i+3); printf("%-6d",hlist[i].k); }; gotoxy(19,2);printf("name: "); for(i=0;i {gotoxy(19,3+i); printf("%s",hlist[i].name); }; gotoxy(28,2);printf("spell: "); for(i=0;i {gotoxy(28,i+3); printf("%s",hlist[i].py); }; gotoxy(40,2);printf("thelength: "); for(i=0;i {gotoxy(43,i+3); printf("%2d",hlist[i].si); }; gotoxy(53,2);printf("H(key): "); for(i=0;i {gotoxy(53,i+3); printf("%2d",(hlist[i].k)%M); }; average=0; for(i=0;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 {gotoxy(1,i+3); printf("%-3d",i+15); }; gotoxy(9,2);printf("theH(key)is: "); for(i=0;i {gotoxy(10,i+3); printf("%-6d",hlist[i+15].k); }; gotoxy(19,2);printf("name: "); for(i=0;i {gotoxy(19,3+i); printf("%s",hlist[i+15].name); }; gotoxy(28,2);printf("spell: "); for(i=0;i {gotoxy(28,i+3); printf("%s",hlist[i+15].py); }; gotoxy(40,2);printf("thelength: "); for(i=0;i {gotoxy(43,i+3); printf("%2d",hlist[i+15].si); }; gotoxy(53,2);printf("H(key): "); for(i=0;i {gotoxy(53,i+3); printf("%2d",(hlist[i+15].k)%M); }; average=0; for(i=0;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 {gotoxy(1,i+3); printf("%-3d",i+30); }; gotoxy(9,2);printf("theH(key)is: "); for(i=0;i {gotoxy(10,i+3); printf("%-6d",hlist[i+30].k); }; gotoxy(19,2);printf("name: "); for(i=0;i {gotoxy(19,3+i); printf("%s",hlist[i+30].name); }; gotoxy(28,2);printf("spell: "); for(i=0;i {gotoxy(28,i+3); printf("%s",hlist[i+30].py); }; gotoxy(40,2);printf("thelength: "); for(i=0;i {gotoxy(43,i+3); printf("%2d",hlist[i+30].si); }; gotoxy(53,2);printf("H(key): "); for(i=0;i {gotoxy(53,i+3); printf("%2d",(hlist[i+30].k)%M); }; average=0; for(i=0;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(); }; i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构课程设计实验报告E10914060 刘晨晨 数据结构 课程设计 实验 报告 E10914060