当前位置:文档之家› 数据结构实验报告模板(验证型)

数据结构实验报告模板(验证型)

学期:2010-2011学年第一学期指导教师:杨华莉成绩:实验一顺序表的基本操作一、实验目的1.掌握使用VC++6.0调试程序的基本方法;2.掌握线性表的顺序存储结构的类型定义;3.掌握顺序表的基本操作的实现,如:插入、删除、遍历、查找、排序、修改、合并等;4.掌握顺序表的应用。

二、实验要求1.认真阅读和掌握本实验的示例程序。

2.上机运行示例程序,打印出程序的运行结果,并作必要的说明。

3.对示例程序,按照对线性表的操作需要,在程序中至少添加2个顺序表的相关操作。

如:i.查找并显示分数在区间[a,b)的学生信息;ii.查找并显示最高分或最低分学生信息;iii.统计不及格或及格人数及所占比例;iv.将信息表按学号、姓名或分数升序或降序排列;v.按学号顺序进行数据元素的插入;vi.删除指定学号或姓名的学生信息;vii.修改某个学生的信息;viii.其它。

4.重新改写主函数(要求必需调用自己添加的操作),打印出文件清单(自己添加的函数、修改后的主函数和运行结果)。

5.对修改后的程序,分析每一个算法(函数)的时间复杂度。

6.根据上述要求撰写实验报告,并简要给出算法设计小结和心得。

三、实验环境1.台式计算机每人一台;2.软件:Visual C++6.0四、实验内容和实验结果一.示例程序运行结果及说明二.自己添加的新函数(至少2个),要求加必要的注释。

SqList Delete_SqList(SqList &L)//删除学生信息{Elemtype x;int i=0;int choice=DMenu();char name[25];int num,k;if(!L.length){printf("表为空,无法删除!");exit(0);}switch(choice){case 1: //按姓名删除printf("\n请输入要删除的学生的姓名\n");scanf("%s",&name);k=strcmp(name,L.data[i].name);//比较姓名if(k==0){x=L.data[i-1];for(int m=L.length-1;m>=i-1;--m)L.data[i-1]=L.data[i];--L.length;break;}case 2: //按学号删除printf("\n请输入要删除学生的学号\n");scanf("%d",&num);if(num==L.data[i].num){for(int m=L.length-1;m>=i-1;--m)L.data[i-1]=L.data[i];--L.length;break;}case 3:break;}return L;}void TongJi_SqList(SqList L)//统计信息表中学生的信息{int i;int choice=TMenu();//选择所要统计的方式的菜单switch(choice){case 1: for(i=0;i<L.length;i++)//统计男生信息if(L.data[i].sex=='m')PrintElem(L.data[i]);break;case 2: for(i=0;i<L.length;i++)//统计女生的信息if(L.data[i].sex=='f')PrintElem(L.data[i]);break;case 3: for(i=0;i<L.length;i++)//统计不及格的人if(L.data[i].score<60)printf(“不及格的为:”);PrintElem(L.data[i]);break;case 4: for(i=0;i<L.length;i++)//统计优秀的人if(L.data[i].score>90)printf(“分数在90分以上的为:”);PrintElem(L.data[i]);break;case 5: break;}}void PaiXu_SqList(SqList L)//排序{int i,j,k;int choice=PMenu();//选择菜单switch(choice){case 1: //按序号升序排列for(i=0;i<L.length;i++)for(j=0;j<L.length-i;j++)if(L.data[j].num>L.data[j+1].num){k=L.data[j].num;L.data[j].num=L.data[j+1].num; //冒泡法排序L.data[j+1].num=k;}for(j=0;j<L.length;j++)//输出排序结果PrintElem(L.data[j]);break;case 2: //按分数降序排列for(i=0;i<L.length;i++)for(j=0;j<L.length-i;j++)if(L.data[j].score<L.data[j+1].score){k=L.data[j].score;L.data[j].score=L.data[j+1].score;L.data[j+1].score=k;}for(j=0;j<L.length;j++)//输出结果PrintElem(L.data[j]);break;case 3: //按分数升序排列for(i=0;i<L.length;i++)for(j=0;j<L.length-i;j++)if(L.data[j].score>L.data[j].score){k=L.data[j].score;L.data[j].score=L.data[j+1].score;L.data[j+1].score=k;}for(j=0;j<L.length;j++)//输出排序结果PrintElem(L.data[j]);break;case 4: break;}}三.改写后的主函数(要求必需调用自己添加的操作)void main(){//通过文件input1.txt输入数据,结果输出到文件output1.txt //打开输入输出文件FILE *in,*out;if((in=fopen("input1.txt","r"))==NULL){ printf("cannot open infile\n");exit(0);}if((out=fopen("output1.txt","w"))==NULL){ printf("cannot open infile\n");exit(0);}int choice;SqList L;Init_SqList(L);//系统文件初始化,构造空表Lwhile(1){choice=Menu();switch(choice){case 1: Creat_SqList(L,in);//导入数据,根据文件input.txt读入的数据建立顺序表Lbreak;case 2: Traver_SqList(L);//查询,输出顺序表break;case 3: Insert_SqList(L);// 在顺序表L中插入一个新元素break;case 4: Delete_SqList(L);break;//删除元素case 5: TongJi_SqList(L);break;//统计case 6: PaiXu_SqList(L);break;//排序case 7: Cheng_SqList(L);break;//修改case 0: SaveList(L,out);fclose(in);fclose(out);exit(-1);break;//保存数据,并退出系统}getchar();}}四.改写后程序的运行结果。

五.简要给出所选示例程序中算法的时间复杂度分析结果。

void PrintElem(Elemtype a);//打印输出数据元素a的各数据项此函数的void Init_SqList(SqList &L);//构造一个空的顺序表Lvoid SaveList(SqList L,FILE *out);//保存顺序表L的数据//建表,从文件读取数据,以尾插法建立顺序表Lvoid Creat_SqList(SqList &L,FILE *in);//查询,遍历顺序表L(输出L中的数据序列)void Traver_SqList(SqList L);void TongJi_SqList(SqList L);void PaiXu_SqList(SqList L);void Cheng_SqList(SqList L);//添加,在顺序表L中插入一个新元素SqList Insert_SqList (SqList &L);SqList Delete_SqList(SqList &L);六.简要给出算法设计小结和心得。

平时我们学C语言视乎都是为了考试或者做一些比较常规的题目,而这次实训却给我们的将所学知识运用于解决实际问题的机会,让人更有激情,这就是编写软件的在雏形,也让我们感受到了编写软件程序的乐趣。

但是不仅仅是如此,更为重要的是在运用所学知识的过程中,记住这些知识,并能够广泛的运用!这一次编写大作业的程序又让我感受到学程序可以锻炼缜密的思维了。

因为平时练习的都是小程序,所以句段比较少,一些错误都很容易被检查出来,但是这次实训却是上百段的语句,难以检查,似乎也没有经验去怎么检查,那一刹那感觉到很急,但又不知如何是好,可是又不轻易的向老师询问,因为好像蛮简单,相信自己能够检查出来,所以我一般都是独立思考的完成的,只有少部分是在老师和与同学讨论下完成的。

相关主题