数据结构实验报告.docx
- 文档编号:7093129
- 上传时间:2023-01-17
- 格式:DOCX
- 页数:47
- 大小:540.54KB
数据结构实验报告.docx
《数据结构实验报告.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告.docx(47页珍藏版)》请在冰豆网上搜索。
数据结构实验报告
《数据结构》课程实验
实验报告
专业:
计算机
班级:
计算机102班
姓名:
********************************
完成日期:
2012年6月20日
实验一Joseph问题求解算法的设计与实现
本实验主要由?
?
?
?
?
?
完成
实验内容:
约瑟夫(Joseph)问题的一种描述是:
编号为1,2,。
。
。
,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。
一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。
报到m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。
试设计一个程序求出出列顺序。
实验目的:
掌握链表的基本操作:
插入、删除、查找等运算,能够灵活应用链表这种数据结构。
流程图:
程序源代码:
#include
#include
#defineLENGTH30
typedefstructnode
{
intnum;
intsecret;
structnode*next;
};
structnode*Basic_Create(inta)
{
structnode*head,*n,*basic;
intm,i;
printf("请依次输入密码值m:
\n");
for(i=1;i<=LENGTH;i++)
{
scanf("%d",&m);
if((m>0)&&(m<=a))
{
if(i==1)
{
head=malloc(sizeof(structnode));
head->num=i;
head->secret=m;
head->next=head;
basic=head;
}
else
{
n=malloc(sizeof(structnode));
n->num=i;
n->secret=m;
n->next=head;
basic->next=n;
basic=n;
}
}
else
break;
}
returnbasic;
}
voidPrint(conststructnode*head)
{
printf("你输入的数为:
\n");
printf("序号\t密码:
\n");
do
{
printf("%d\t%d\n",head->next->num,head->next->secret);
head=head->next;
}while(head->next->num!
=1);
}
voidmain()
{
inti,j=1,m,t;
structnode*p;
printf("请输入m的限制值:
\n");
scanf("%d",&m);
p=Basic_Create(m);
Print(p);
printf("顺序\t序号\n");
do
{
for(i=1;i p=p->next; printf("%d\t%d\n",j++,t=p->next->num); m=p->next->secret; p->next=p->next->next; }while(p->next->num! =t); } 调试过程: 虽然本实验比较简单,但在调试过程中还是出现了因为不细心导致的问题,例如缺少分号、排序不对应等,经过多次调试之后,试验取得成功。 结果分析: 输入m的限制值: 20,密码: 3、1、7、2、4、8、4,输出结果: 6、1、4、7、2、3、5. 实验二停车场管理 本实验主要由? ? ? ? ? ? 完成 实验内容: 设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。 汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列,若停车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等侯,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。 试为停车场编制按上述要求进行管理的模拟程序。 实验目的: (1)深入了解栈和队列的特性,掌握栈和队列的存储方法。 (2)掌握栈和队列的基本操作,如初始化、入栈(队列)、出栈(队列)等,并能在实际问题背景下灵活运用。 流程图: 程序源代码: #include #include #include #defineLENGTH30 #defineFEE1 inti=0,j=1,k,r_1; typedefstructbasic { charmess_1; charmess_2; shortintnum; shortsj; }; typedefstructnode { structbasiccar; structnode*next; }; voidPrint_In(structbasic*middle) { printf("状态\t车牌号\t时间\n"); while(middle->mess_2=='A') { printf("%c\t%d\t%d\n",middle->mess_2,middle->num,middle->sj); middle++; } } voidPrint_ord(inta,structbasic*p,structbasic*q) { printf("\n第%d次移动结果: \n",a); printf("停车场\n"); Print_In(p); printf("辅助车库: \n"); Print_In(q); } voidPrint_ord2(inta,structnode*middle,structnode*q) { printf("\n第%d次移动结果: \n",a); printf("通道\n"); printf("状态\t车牌号\t时间\n"); middle=q->next; for(r_1=1;r_1 { printf("%c\t%d\t%d\n",middle->car.mess_2,middle->car.num,middle->car.sj); middle=middle->next; } } voidPrint_Out(structnode*middle) { printf("状态\t车牌号\t时间\n"); for(k=0;k { printf("%c\t%d\t%d\n",middle->car.mess_2,middle->car.num,middle->car.sj); middle=middle->next; } } voidmain() { structbasicparking_lot[LENGTH],*p,parking_help[LENGTH]; structnode*q,*head,*middle; intn,hour,car_num,diff_t,money,ans,r; charc_1; shortintsig=1,sig_2; printf("请输入停车场最大停车数n: \n"); scanf("%d",&n); while(sig) { p=malloc(sizeof(structbasic)); printf("请输入状态: (0: E1: A2: D)\n"); scanf("%d",&c_1); printf("请输入车牌号: \n"); scanf("%d",&car_num); printf("请输入时间: \n"); scanf("%d",&hour); switch(c_1) { case1: c_1='A'; p->mess_2=c_1; p->num=car_num; p->sj=hour; if(i { p->mess_1='I'; parking_lot[i]=*p; system("cls"); printf("停车场未满\n"); printf("停车场\n"); i++; Print_In(parking_lot); } else { if(j==1) { head=malloc(sizeof(structnode)); head->car=*p; head->car.mess_1='O'; head->next=head; q=head; } else { middle=malloc(sizeof(structnode)); middle->car=*p; middle->car.mess_1='O'; middle->next=head; q->next=middle; q=middle; } system("cls"); printf("停车场已满\n"); printf("停车场\n"); Print_In(parking_lot); printf("通道: \n"); middle=head; Print_Out(middle); i++; j++; } break; case2: r=0; system("cls"); printf("是否显示车辆出库具体信息? (按非零键显示): \n"); scanf("%d",&sig_2); for(k=0;k<=i-j;k++) { if(parking_lot[k].num==car_num) { ans=1; break; } ans=0; } if(ans==0) { middle=head; for(k=1;k { if(middle->car.num==car_num) { ans=2; break; } middle=middle->next; } } if(ans==1) { printf("此车在停车场内: \n"); k=i-j; while(parking_lot[k].num! =car_num) { parking_help[r]=parking_lot[k]; parking_lot[k].mess_2=''; if(sig_2) Print_ord(r+1,parking_lot,parking_help); k--; r++; } r_1=r; diff_t=hour-parking_lot[k].sj; money=diff_t*FEE; parking_lot[k].mess_2=''; if(sig_2) Print_ord(r+1,parking_lot,parking_help); r--; r_1++; while(r! =-1) { parking_lot[k]=parking_help[r]; parking_help[r].mess_2=''; if(sig_2) Print_ord(r_1+1,parking_lot,parking_help); k++; r_1++; r--; } if(j==2) { parking_lot[k]=head->car; if(sig_2) Print_ord(r_1+1,parking_lot,parking_help); j--; } else if(j>2) { parking_lot[k]=head->car; head=head->next; q->next=head; if(sig_2) Print_ord(r_1+1,parking_lot,parking_help); j--; } printf("车辆信息: \n"); printf("车牌号: %d停车时间: %d分钟停车费用%d元\n",car_num,diff_t,money); i--; } elseif(ans==2) { printf("此车在通道上: \n"); k=1; while(q->car.num! =car_num) { for(r_1=1;r_1 { q=head; head=head->next; } if(sig_2) Print_ord2(k,middle,q); k++; } for(r_1=1;r_1 { q=head; head=head->next; } head=head->next; q->next=head; j--; if(sig_2) Print_ord2(k,middle,q); } else printf("\t\t\t您的车不在本停车场内...\n"); break; case0: sig=0; break; default: system("cls"); printf("此轮输入有误,请重新输入\n"); } } } 调试过程: 此程序比较繁琐,牵扯到站和队列的相关问题,入站出站得按一定顺序来做,另外,本程序计算费用时还应考虑在过道以及停车场内的时间,要具体的问题具体分析,由于时间原因,本程序未能对车辆的大小收取不等价的费用,不太完美。 结果分析: 基本要求: 输入n=2,(a,1,5),(1,2,10),(d,1,15,),(a,3,20),(a,4,15),(a,5,30),(d,2,35),(d,4,40),(e,0,0)。 结果如下: 选作内容: 汽车从便道上开走 实验三基于哈夫曼(Huffmen)编码的通信系统的设计与实现 本实验主要由? ? ? ? ? ? )完成 实验内容: 利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。 但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码。 试设计一个基于哈夫曼(Huffmen)编码的通信系统。 实验目的: (1)掌握二叉树的存储结构及其相关操作。 (2)掌握构造哈夫曼树的基本思想,及其编码/译码过程。 流程图 程序源代码: #include #include #include #include #include"huffman.h" voidmain() { inti,j; intn=0;//n是记录总够有都少个不同的字母 intm;//m是记录总共有多少个字符 charmessage[100]; intrecord[26];//记录每一个字母的权值 intc[26];//记录权值不为0的字母 C_valuea[26];//记录字母和所对应的权值 HTNode*HT; char**HC; char**Code;//b是对HC的扩展 cout<<"请输入一条句子"< cin>>message; m=strlen(message);//求字符串的长度 //cout< for(i=0;i<26;i++) { record[i]=0;//记录每一个字母的权值 c[i]=0;//记录权值不为0的字母 } for(i=0;i<100;i++) { if(message[i]=='a')record[0]++;if(message[i]=='b')record[1]++;if(message[i]=='c')record[2]++;if(message[i]=='d')record[3]++; if(message[i]=='e')record[4]++;if(message[i]=='f')record[5]++;if(message[i]=='g')record[6]++;if(message[i]=='h')record[7]++; if(message[i]=='i')record[8]++;if(message[i]=='j')record[9]++;if(message[i]=='k')record[10]++;if(message[i]=='l')record[11]++; if(message[i]=='m')record[12]++;if(message[i]=='n')record[13]++;if(message[i]=='o')record[14]++;if(message[i]=='q')record[15]++; if(message[i]=='p')record[16]++;if(message[i]=='r')record[17]++;if(message[i]=='s')record[18]++;if(message[i]=='t')record[19]++; if(message[i]=='u')record[20]++;if(message[i]=='v')record[21]++;if(message[i]=='w')record[22]++;if(message[i]=='x')record[23]++; if(message[i]=='y')record[24]++;if(message[i]=='z')record[25]++; } for(i=0,j=0;i<26;i++) { if(record[i]! =0) { n++; c[j]=i;//记录权值不为0的字母有哪些 j++; } } for(i=0;i { a[i].word=c[i]+97;//a[i]记录的是字母,字母的个数,和字母的位置 a[i].num=record[c[i]]; a[i].num_what=i;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告