数据结构与数据库原理大作业.docx
- 文档编号:12483479
- 上传时间:2023-04-19
- 格式:DOCX
- 页数:14
- 大小:130.35KB
数据结构与数据库原理大作业.docx
《数据结构与数据库原理大作业.docx》由会员分享,可在线阅读,更多相关《数据结构与数据库原理大作业.docx(14页珍藏版)》请在冰豆网上搜索。
数据结构与数据库原理大作业
西安建筑科技大学华清学院
数据结构与数据库原理大作业
报告书
姓名:
曹建成
班级:
通信1001班
学号:
201006020114
目录
摘要…………………………………………………………………………1
1程序概要设计……………………………………………………………2
1.1数据类型…………………………………………………………………2
1.2需求分析…………………………………………………………………2
1.3概要设计……………………………………………………………………3
1.4程序流程图…………………………………………………………………3
2详细设计………………………………………………………………………5
2.1joseph环源代码……………………………………………………………5
2.2学生成绩程序源代码………………………………………………………8
3调试分析………………………………………………………………………9
4总结……………………………………………………………………………11
5参考文献…………………………………………………………………………12
摘要
Joseph环是个很有意思的问题,其意义在于它启发我们用一个循环的链来表示这个圈子,可以使用结构数组来构成一个循环链。
结构中有两个成员,其一为指向下一个人的指针,以构成环形的链;其二为该人的标记。
我们以单向循环链表的方式建立约瑟夫环。
建立输入处理输入数据,输入m的初值,n,建立单向链表,输入每个人的密码建立一个输出函数将正确的出列顺序输出序列。
为了更好的巩固和加强书本学的知识,把所学的东西转化为实际应用。
应用了SQL语言。
对数据库的创建、修改、删除方法有用了一定的了解。
通过导入表和删除表、更改表学会了对于表的一些操作。
为了建立一个关系数据库信息管理系统,必须得经过系统调研、需求分析、概念设计、逻辑设计、物理设计、系统调试、维护以及系统评价的一般过程,为毕业设计打下基础。
当人们收集了大量的数据后,应该把它们保存起来进入近一步的处理,进一步的抽取有用的信息。
当年人们把数据存放在文件柜中,可现在随着社会的发展,数据量急剧增长,现在人们就借助计算机和数据库技术科学的保存大量的数据,以便能更好的利用这些数据资源。
关键词:
建立单循环列表,需求分析,程序设计。
1程序概要设计
1.1数据类型
typedefstructNode{
intinfo;//节点的座位数
intcode;//节点的密码
structNode*next;
}*PNode,*LinkList;
1.2需求分析
任务:
编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。
一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数。
报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。
设计一个程序来求出出列顺序。
其中主要功能分为三项:
1、要求使用单向循环链表模拟过程。
2、输入报数上限值m和人数上限值n,密码值均设定为正整数。
3、用户输入Joseph的必要数据,并显示出列顺序。
各个功能模块有:
1、主函数模块:
初始化图形界面,实现软件功能。
2、单向循环链表创建模块:
用循环链表表示joseph环。
3、输入子模块:
对用户输入数据进行处理。
1.3概要设计
1、创建单向循环链表模块:
其功能是对带头结点的单循环链表head,以m为初始报数上限值,实现算法思想部分描述的功能。
2、voidmain函数,主函数,功能是给出测试数据值,建立测试数据值的带头结点单循环链表,调用Jeseph环函数实现问题要求。
1.4程序流程图
结束
2详细设计
2.1joseph环源代码
带头结点结构体定义:
Typedefstructnode
{
DataTypedata;
Structnode*next;
}CirNode;
不带头结点初始化:
voidListInitiate(CirNode*)
{
L=q=(structCirNode*)malloc(sizeof(structCirNode));/*建立一个不带头结点的单向循环链表*/
}
主函数模块
#defineERROR0
#defineOK1
#include
#include
structCirNode/*定义每个结点的类型*/
{
intdata;/*每个人所拥有的密码*/
intnum;/*每个人在圈中的位序*/
structCirNode*next;
};
inta[30];/*人数要求≤30*/
structCirNode*CreateList(intn)/*生成n个结点的单向循环链表*/
{
structCirNode*L,*p,*q;
inti;
intj=1;
L=q=(structCirNode*)malloc(sizeof(structCirNode));/*建立一个不带头结点的单向循环链表*/
if(!
q)returnERROR;
printf("输入每个人的密码:
\n");
q->num=j;
printf("%d.data=",j);
scanf("%d",&q->data);
j++;
q->next=L;
for(i=1;i { p=(structCirNode*)malloc(sizeof(structCirNode)); printf("输入每个人的密码: \n"); p->num=j; printf("%d.data=",j); scanf("%d",&p->data); j++; q->next=p; p->next=L; q=q->next; }/*for*/ return(L); }/*Create*/ structCirNode*DeleteList(structCirNode*L,intm,intn)/*报m的人出列*/ { inti,j=0; intk=n; structCirNode*p,*q,*pre; pre=p=L; do { i=1; while(i if(m==1) { while(pre->next! =p)pre=pre->next; m=p->data;/*得到新的密码*/ a[j]=p->num;/*得到出列人的序号*/ q=p; pre->next=p->next; p=p->next; free(q); L=pre=p;/*让新的报1的人作为头结点*/ k--;j++; }/*if*/ else { q=p->next; m=q->data; a[j]=q->num; p->next=q->next; p=q->next; free(q); L=pre=p; k--;j++; }/*else*/ }while(k>1); a[j]=p->num;/*最后一个出列人的序号*/ printf("现在所有人出列.\n"); return(L); }/*DeleteList*/ intmain() { structCirNode*L; inti,n,m; printf("======ThisisaJosephproblem======\n"); printf("请输入人数,n="); scanf("%d",&n); if(n>30||n<1) { printf("ERROR! Pleaseinputagain,n="); scanf("%d",&n); }/*if*/ L=CreateList(n); printf("Pleaseinputthefirstcode,m="); scanf("%d",&m); if(m<1) { printf("ERROR! Pleaseinputagain,m="); scanf("%d",&m); }/*if*/ DeleteList(L,m,n); printf("出队人的顺序31: \n"); for(i=0;i printf("%d",a[i]); printf("\n"); system("pause"); return0; 2.2学生成绩程序源代码 #include structstu{intnum;char*name;floatscore[3];} student[10]={{102001,"AAA",75,85,90},{102002,"BBB",78,85,90},{102003,"CCC",72,83,98},{102004,"DDD",80,84,93}, {102005,"EEE",75,84,93},{102006,"FFF",65,83,81},{102007,"GGG",85,73,68},{102008,"HHH",65,74,82},{102009,"III",75,72,100}, {102010,"JJJ",75,74,70}}; main() {inti,j; floatave[10],ave2[10],s[10],t; for(i=0;i<10;i++) s[i]=0; for(i=0;i<10;i++) {for(j=0;j<3;j++) s[i]+=student[i].score[j]; ave[i]=s[i]/3;} printf("everystudent平均成绩: \n"); for(i=0;i<10;i++) {printf("%d\n",student[i].num);printf("%f\n",ave[i]);} printf("成绩最高的同学=\n"); for(i=0;i<10;i++) ave2[i]=ave[i]; for(i=0;i<10;i++) for(j=0;j<10-i;j++) if(ave[j]<=ave[j+1]) {t=ave[j];ave[j]=ave[j+1];ave[j+1]=t;} for(i=0;i<10;i++) {for(j=0;j<10;j++) if(ave[i]==ave2[j]) printf("%d\n",student[j].num);printf("%f\n",ave[i]);}} 3.调试分析 1.任务: 编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。 一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数。 报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。 设计一个程序来求出出列顺序。 要求: 利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号。 测试数据: m的初值为20,n=7,7个人的密码依次为3,1,7,2,4,7,4,首先m=6,则正确的输出是什么? 测试结果如下: 图3-1joseph环调试分析图 2、以学生成绩为数据元素建立一个一维数组。 一个学生的成绩信息包括学号、姓名以及数学、语文、英语3科的成绩。 程序中预定义10位同学的成绩,这些记录按学号有序。 在程序中实现下列功能: (1)统计每位同学3门课程的平均成绩; (2)按平均成绩高低进行冒泡排序并显示结果。 测试结果如下: 图3-2学生成绩调试分析图 4.总结 本次实验算是数据结构课的第一次课程设计,也是我第一次接触《数据结构》,但是,这不是我第一次做课程设计,在完成这个课程设计的过程当中自己感觉还是收获蛮多的。 大体知道了一些流程步骤,对C语言的使用更加熟练,对本学期所学的知识有一个更好的了解,更加全面地认识自己。 能明显感觉到自己在很多方面的不足,一开始对单链表结构并不是很熟悉,并且自己还是头一次单独完成这个相对而言比较大的编程,对问题分析和整体构思还有很大不足。 问题要分析解决的,找出问题以便完善学习计划,改变学习内容与方法提供实践依据。 做一个课程设计要注意许多方面,无论是格式,还是书写的内容和要表达的意思都得严格要求自己,本次课程设计涉及了很多知识点,我通过查阅籍、上网浏览我获得很大的启发。 特别是同学们给了我很大的帮助,有很多问题是在同学的帮助下解决的。 做完设计,我已深刻体会到了学习这门课的重要性和必要性,同时,它给了我很多思考: 学习是一个思考的过程,我们应该主动去想学习一门知识后咋样去应用,而不是一味地被动的接受。 数据结构及其算法在解决现实生活中常见问题和书写软件设计方面都有着重要的意义,我们应该好好掌握它的相关知识,在以后的学习过程中,更多的去学会如何应用知识。 5.参考文献 1.严蔚敏,吴伟民,米宁编著,数据结构集《C语言版》.北京: 清华大学出版社。 2.《算法与数据结构习题精解和实验指导》,宁正元等,清华大学出版社,2007。 3.谭浩强.C程序设计[M].北京: 清华大学出版社,2005。 4.《数据结构》(用面向对象的方法与C++描述),殷人昆等,清华大学出版社,2009。 5.谭浩强,张基温,唐永炎编著,C语言程序设计教程。 北京: 高等教育出版社,1992。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 数据库 原理 作业