ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:115.33KB ,
资源ID:9035583      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9035583.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构课程实验报告.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构课程实验报告.docx

1、数据结构课程实验报告实验报告专业班级:08级管理科学一班小组成员:吴蓓蕾裴倩茹白雪 贾真真完成日期:2010年7月7日小组分工情况题目一:基础题完成人员:白雪题目二:应用题完成人员:吴蓓蕾题目三:综合题完成人员:裴倩茹题目四:拓展题完成人员:贾真真 吴蓓蕾短学期小结完成人员:白雪题目一基本题:数制的转换(十进制到 m进制转换)1解题思路(较详细说明)十进制转化即为栈的应用。首先定义栈的结构体,入栈函数,出栈函 数。再添加转换函数。转换函数思路:用栈暂存低位值(n/m循环取 余,依次压入栈中,直到余数为0时,循环终止。最后,将余数逆序 输出,即出栈。)2、函数调用图及各函数的功能(简要说明) 函

2、数中用到三个函数:conversion 函数,pop 函数,push 函数Con version函数为将十进制数n转化为m进制Pop函数为出栈函数Push函数为入栈函数;函数调用图Main函数Conv ersi on 函数Pop函数Push函数3、三组测试数据(原始数据,预期结果,实际结果) 第一组数据原始数据:取10,2预期结果:1010实际结果:第二组数据原始数据;取15,2预期结果:1111 实际结果:第三组数据原始数据:64, 8预期结果:100实际结果:4、含注释的源程序(说明主要变量的作用,函数段的功能)#in elude #in clude#in clude struct Lst

3、ackint data;struct Lstack *n ext; ;/定义链栈的结构体struct Lstack *push(struct Lstack *top,i nt k)struct Lstack *p;p=(struct Lstack *)malloc(sizeof(struct Lstack); p-data=k;p_n ext=top; top=p;return top;/定义入栈函数/新分配一个空间栈顶top指针上移struct Lstack *pop(struct Lstack *top) int x;定义出栈函数x=top-data; prin tf(%d ,x); to

4、p=top-n ext;数据输出/栈顶top指针下移return top;void conversion (i nt n, int m)struct Lstack *s=NULL;while (n) s=push(s ,n %m); n=n/m; while(s!=NULL) s=pop(s);void mai n()int n,m;printf(Input十进制数,转换进制数:”);scan f(%d,&n); scan f(%d, &m);con versio n(n ,m);prin tf(n);5、编译与运行情况(存在的问题)#i nclude #i nclude 添加语句#in cl

5、udestruct Lstackint data;struct Lstack *n ext;十进制数n与m进制数的转换struct Lstack *push(struct Lstack *top,i nt k)struct Lstack *p;p=(struct Lstack *)malloc(sizeof(struct Lstack); p-data=k;p_n ext=top; top=p;return top;未对malloc进行定义,不能应用。struct Lstack *pop(struct Lstack *top) int x;while(top!=NULL)x=top-data;

6、 prin tf(%d ,x);top=top-n ext;return top;void conversion (i nt n, int m)struct Lstack *s=NULL;while (n) s=push(s ,n %m); n=n/m; while(s!=NULL) s=pop(s);void mai n()int n,m;printf(Input十进制数,转换进制数:”);scan f(%d,&n); sca nf(%d,&m);con versio n(n ,m);prin tf(n);题目二并去掉重复元素应用题:将两个有序线性表合并成一个有序线性表,1解题思路(较详细说

7、明)算法分析算法主要包括:搜索、比较、插入三个操作。搜索:需要两个指针搜索两个链表;ASCII值的比较);比较:比较结点数据域中数据的大小(实际上是插入:将两个结点中数据小的结点插入新链表2、函数调用图及各函数的功能(简要说明)该程序用到了三个函数:CreateListR函数: 功能:建立链表MergeList函数: 功能:合并链表PrintList函数: 功能:输出链表函数调用图:3、三组测试数据(原始数据,预期结果,实际结果)第一组数据测试:实际结果:原始数据:15648 28379 预期结果:123456789第二组数据测试:实际结果:原始数据:1458 2349 预期结果:123458

8、9第三组数据测试:原始数据:1568 2349 预期结果:12345689实际结果:c、 *C: DOCUBEUTS AND SETTIFGSX 日口-|I1&68 讪轴轆*10SET:234912345689ant/ k住y continuedHI 1第四组数据测试:实际结果:4、含注释的源程序(说明主要变量的作用,函数段的功能)#i nclude #in elude #i nclude typedef struct Ln ode 结构体定义char data; / 数据域struct Lnode *n ext; 指针域ListNode;ListNode *CreateListR() / 尾

9、插法建立链表char ch; ListNode *head,*s,*r;head=r=NULL;while(ch=getchar()!=n)s=(ListNode *)malloc(sizeof(ListNode);s-data=ch; s-n ext=NULL;if(head=NULL) head=s;else r-n ext=s;r=s;retur n head;struct Lnode *MergeList(struct Lnode *ha, struct Lnode *hb) 合并链表struct Lnode *pa=ha, *pb=hb, *hc=NULL, *r=hc; 两个指针

10、pb,pc 从两个链表ha,hb的表头开始搜索,指针r指向新 链表hc的头while(pa&pb) /两个链表都不为空时if(pa-datadata)if(hc=NULL) hc=pa;else r-n ext=pa;r=pa; pa=pa- next; 将较小的结点插入新链表else if(hc=NULL) hc=pb;else r-n ext=pb;r=pb; pb=pb-n ext; if(hc!=NULL) r- n ext=pa?pa:pb;else hc=pa?pa:pb;return hc; /打印合并后链表/当p指向的非空时/取出数据域中的值,并输出Prin tList(str

11、uct Ln ode *c) struct Lnode *p;p=c;while(p!=NULL)prin tf(%c,p-data); p=p-n ext;prin tf(n);mai n() /主程序struct Lnode *a,*b,*c;a=CreateListR(); / 建立链表b=CreateListR();c=MergeList(a,b); 合并链表Prin tList(c); / 输出链表5、编译与运行情况(存在的问题) 第一组数据中:运行时输出的是没有意义的字符原程序部分代码:Prin tList(struct Lnode *c) II打印合并后链表 struct Lno

12、de *p;p=c-next; 修改:p=c; /原因:merge函数建立的 是没有空头结点的链表while(p!二NULL)printf(% d,p-data):修改:%c /原因:结构体定义数据类型为字符型p=p-n ext;prin tf(n);第二组数据中:运行输出的字符串并没有按从小到达的顺序排列。原因:建立链表的时候采用的是头插法,与合并函数 取较小结点插入新链表的思想有冲突,故修改时改为 尾插法建立链表。题目四扩展题:学生成绩管理系统1解题思路(较详细说明)利用结构体定义及 c语言知识将学生成绩这一实体转化为数组类型的记录,其中包括学生学号、姓名、分数三类数据项,利用记录中的关键

13、字, 通过输入、显示、排序、插入、删除、查询、统计等函数对学生数据结构课程的成绩进行管理分析。2、函数调用图及各函数的功能(简要说明)函数调用图:In put()Display()Sort_by_ num()Ma in ()1Fmenu _select()In sert_a_record()Statistic。Query_a_record()Delete_a_record()功能:提供交互界面,供用户选择该系统的各个功能和选项。 功能:交互输入若干条记录、信息。功能:显示所有输入的符合定义的记录。功能:交互式插入一条记录,再利用冒泡排序法对记录进行排序Delete_a_record()功能:按

14、姓名进行交互式查找,删除一条查找到的记录Query_a_record()功能:按姓名进行交互式输入,查找并显示一个记录Statistic() 功能:新增功能,输出统计信息3、程序运行演示及检验(1)在“菜单”中选择In put records ,输入四条记录(2)选择Display All Rrcords ,显示输入的记录(3)选择Sort,显示排序成功选择Display All Rrcords,查看排序后的结果(4)选择Insert a Records输入需要插入的记录选择Display All Rrcords,查看输入的记录(5)选择Delete a Record输入删除记录中的学生姓名删

15、除后的结果(6)选择Query,输入所要查询记录中学生的姓名,显示出查询结果(7)选择Statistic ,显示所有的记录数量、最高分者的记录、最低分者的记录和平均分(8)选择Quit,结束程序4、含注释的源程序(说明主要变量的作用,函数段的功能)#include /* 引用库函数 */#in clude#in clude#in cludetypedef struct /*定义结构体数组*/char num10; /* 学号 */char name20; /* 姓名 */int score; /* 成绩 */Stude nt;Student stu80; /*结构体数组变量 */int men

16、u_select() /* 菜单函数 */char c;doprintf(t*Students Grade of Data Struture Course Management System*n); /* 菜单选择 */printf(t | 1.1 nput Records |n);prin tf(t | 2. Display All Records |n);prin tf(t | 3. Sort |n ”);printf(t | 4. Insert a Record |n);prin tf(t | 5. Delete a Record |n);prin tf(t | 6. Query |n)

17、;prin tf(t | 7. Statistic |n);prin tf(t | 0. Quit |n);prin tf(t*n);prin tf(ttGive your Choice(0-7):); c=getchar(); /* 读入选择 */ while(c7);return(c-O); /* 返回选择 */ int Input(Student stud,int n) /* 输入若干条记录 */ int i=0;char sign,x10; /*x10为清除多余的数据所用*/ while(sign!=n&sign!=N) /* 判断 */ printf(tttstudents num:

18、); /* 交互输入 */sca nf(ttt%s,stud n+i. num);prin tf(tttstude nts name:);sca nf(ttt%s,stud n+i. name);prin tf(tttstude nts score:);sca nf(ttt%d, &stud n+i.score); gets(x); /*清除多余的输入*/ prin tf(ttta ny more records?(Y/N); scanf(ttt%c,&sign); /* 输入判断 */ i+;return( n+i);void Display(Student stud,int n) /* 显

19、示所有记录 */ int i;printf(ttt n); /* 格式头 */prin tf(ttt nu mber n ame scoren);printf(ttt n);for(i=1;i1 &i%10=0) /* 每十个暂停 */printf(ttt n); /* 格式 */prin tf(ttt);system(pause);printf(ttt n);prin tf(ttt);system(pause);void Sort_by_num(Student stud,int n) /* 按学号排序 */ int i,j,*p,*q,s;char t10;for(i=0;in-1;i+)/

20、* 冒泡法排序 */for(j=0;j0)strcpy(t,studj+1. nu m);strcpy(studj+1. nu m,studj. nu m);strcpy(studj. nu m,t);strcpy(t,studj+1. name);strcpy(studj+1. name,studj. name);strcpy(studj. name,t);p=&studj+1.score;q=&studj.score;s=*p;*p=*q;*q=s;int Insert_a_record(Student stud,int n) /* 插入一条记录 */char x10; /*清除多余输入所

21、用*/printf(tttstudents num:); /* 交互式输入 */sca nf(ttt%s,stud n. nu m);prin tf(tttstude nts name:);sca nf(ttt%s,stud n. name);prin tf(tttstude nts score:);sca nf(ttt%d, &stud n.score);gets(x);n+;Sort_by_num(stud,n); /* 调用排序函数 */printf(tttInsert Successed!n); /* 返回成功信息 */return( n);int Delete_a_record(St

22、udent stud,int n) /* 按姓名查找,删除一条记录 */ char s20;int i=0,j;printf(ttttell me his(her) name:); /* 交互式问寻 */scan f(%s,s);while(strcmp(studi.name,s)!=0&in) i+; /* 查找判断 */if(i=n) printf(tttnot find!n); /* 返回失败信息 */return( n);for(j=i;jn-1;j+)/* 删除操作 */strcpy(studj. nu m,studj+1. nu m);strcpy(studj. name,stud

23、j+1. name);studj.score=studj+1.score;printf(tttDelete Successed!n); /* 返回成功信息 */return( n-1);void Query_a_record(Student stud,int n) /* 查找并显示一个记录 */ char s20;int i=0;printf(tttinput his(her) name:); /* 交互式输入 */sca nf(ttt%s,s);while(strcmp(studi.name,s)!=0&in) i+; /* 查找判断 */if(i=n) printf(tttnot find

24、!n); /* 输入失败信息 */return;prin tf(ttthis(her) number:%sn,studi. nu m); /* 输出该学生信息 */prin tf(ttthis(her) score:%dn,studi.score);void Statistic(Student stud,int n) /* 新增功能,输出统计信息 */ int i,j=0,k=0,sum=0;float aver; /*成绩平均值*/for(i=0;istudi.score) j=i;if(studk.scorestudi.score) k=i;aver=1.0*sum/n;printf(tt

25、tthere are %d records.n,n); /* 总共记录数 */printf(tttthe hignest score:n); /* 最高分 */prin tf(ttt nu mber:%s n ame:%s score:%dn,studj. nu m,studj. name,studj.score);printf(tttthe lowest score:n); /* 最低分 */prin tf(ttt nu mber:%s n ame:%s score:%dn,studk. nu m,studk. name,studk.score);printf(tttthe average

26、score is %5.2fn,aver); /* 平均分 */void main() /* 主函数 */int n=0;for(;)switch(menu_select() /* 选择判断 */case 1:prin tf(ttt In put Records n); /* 输入若干条记录 */n=I nput(stu, n);break;case 2:printf(tttDisplay All Recordsn); /* 显示所有记录 */Display(stu, n);break;case 3:prin tf(tttSortn);Sort_by_num(stu,n); /* 按学号排序 */prin tf(tttSort Suceessed!n);prin tf(ttt);system(pause);break;case 4:prin tf(tttI nsert a Recordn);n=lnsert_a_record(stu ,n); /* 插入一条记录 */prin tf(ttt);system(pause);break;case 5:prin tf(tttDelete a Recordn);n=Delete_a_record(stu,n);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1