数据结构与数据库原理大作业.docx
- 文档编号:29336641
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:13
- 大小:168.13KB
数据结构与数据库原理大作业.docx
《数据结构与数据库原理大作业.docx》由会员分享,可在线阅读,更多相关《数据结构与数据库原理大作业.docx(13页珍藏版)》请在冰豆网上搜索。
数据结构与数据库原理大作业
西安建筑科技大学华清学院
数据结构与数据库原理大作业
报告书
姓名:
王琼
班级:
通信1001班
学号:
201006020135
目录
摘要………………………………………………………………………………3
1程序概要设计…………………………………………………………………4
1.1.1数据类型…………………………………………………………………4
1.1.2需求分析……………………………………………………………………4
1.2程序流程图………………………………………………………………………5
2详细设计…………………………………………………………………………9
2.1joseph环程序源代码9
2.2程序源代码10
3调试分析12
4总结……………………………………………………………………………14
参考文献15
摘要
此次实验的目的,就是为了巩固我们的数据库专业知识,更好的加强书本所学的基础技术,把所学的东西转化为实际应用。
随着科学技术的发展,计算机已经成为不可或缺的信息存储和交流的重要工具,而数据库已经起到了关键的作用,数据管理已经极其方便了我们的生活。
学习了SQL语言,使我对数据库的创建、修改、删除方法有了一些了解。
为了建立一个关系数据库信息管理系统,必须得经过系统调研、需求分析、概念设计、详细设计等一般过程,为我的毕业设计打下了基础。
人们把数据存放在文件柜中,可现在随着社会的发展,数据量急剧增长,现在人们就借助计算机和数据库技术科学的保存大量的数据,以便能更好的利用这些数据资源当人们收集了大量的数据后,应该把它们保存起来进入近一步的处理,进一步的抽取有用的信息。
关键词:
建立单循环列表,需求分析,程序设计。
1程序概要设计
1.1数据类型及需求分析
1.1.1数据类型
根据设计要求,本系统的基本数据结构为
typedefstructNode{
intinfo;//节点的座位数
intcode;//节点的密码
structNode*next;
}*PNode,*LinkList;
1.1.2需求分析
1以带结点的单链表的循环存储结构表示每个人的密码,人数小于30,键入每个人的密码,密码为整数且小于10,若输入有误,则报出相应出错信息。
2运行程序以用户和计算机的对话方式执行,即在计算机上显示提示信息,用户
在键盘上输入演示程序中规定的运算命令,相应的输出数据和运算结果显示在其后。
3改程序要求求得一个出队的顺序,首先设定人数,然后分别键入每个人的密码,并选择一个初始出队的人的密码,运行,即可得一个出对顺序。
4程序执行的命令为:
(1)创建链表
(2)求解出队顺序(3)输出出队的顺序
1.2程序流程图
如图2.1通过主函数进行座位号n和初始值m的输入,调用建立单煦暖链表函数init_list和约瑟夫环出列函数yue_list。
图2.2主函数main()流程图
2.如图2.2,建立单循环链表,并且将链表的座位号赋值给q->info,输入每个座位号的密码给q->code;
图2.3建立单循环链表流程图
1.如图2.3进行约瑟夫环出列算法,按先后顺序输出座位号
图2.4进行约瑟夫环出列算法yue_list()流程图
2详细设计
一joseph环程序源代码:
#include
structnode{
intnum;
intcode;
structnode*link;
};//建立链表数据类型
typedefstructnodeNODE; //定义NODE为链表数据类型
NODE*head,*tail; //声明头指针,尾指针
intM,n;
voidcreateL(){
//建表函数
NODE*p,*q;
inti,m;
p=(NODE*)malloc(sizeof(NODE)); //申请头结点空间
p->link=NULL;
head=p; //生成头结点
scanf("%d%d",&M,&n); //读取m,n
for(i=1;i<=n;i++){
q=(NODE*)malloc(sizeof(NODE)); //申请数据结点空间
q->num=i; //用num记录该数据结点的序号
scanf("%d",&q->code); //用code记录该数据结点的密码
p->link=q; //p为当前链表的最后一个数据结点,将q作为p的后继放到链表末尾
p=q; //维护p继续作为当前链表的最后一个数据结点
}
tail=p; //保存尾指针,方便下面约瑟夫环操作时寻找第一个数据节点的前驱
p->link=head->link; //循环链表重要操作,将最后一个数据结点的后继作为第一个数据结点,形成循环链表
}
voidJosephus(NODE*p,intm){
//约瑟夫环函数
NODE*q;
intcount=0; //count变量为报数计数器,记录当前报数的大小
q=tail; //q为尾结点,q的后继就是第一个数据结点
p=p->link; //p作为第一个数据结点
while(p->link!
=p){
count++; //当循环链表所剩元素大于1时
if(count==m){
//当计数器打到当前报数的要求时
printf("%d",p->num); //输出当前出列者的序号
m=p->code; //更新m为出列者的密码
q->link=p->link; //q是p的前驱,此操作完成p所指结点的删除
free(p); //释放刚才删除的p所指结点的空间
p=q->link; //令p指向下一个数据结点
count=0;
}
else{
//当计数器小于报数要求时
q=p;
p=p->link; //维护q和p向前前进一位
}
}
printf("%d",p->num); //打印最后剩下的人的序号
}
main(){
createL(); //建立链表
Josephus(head,M); //约瑟夫环计算
return;}
二程序源代码:
#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报数,如此下去,直到所有人全部出列为止。
设计一个程序来求出出列顺序。
要求:
利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号。
测试数据:
n=7,7个人的密码依次为3,1,7,2,4,7,4,首先m=6,则正确的输出是什么?
输入数据:
建立输入处理输入数据,输入m的初值,n,输入每个人的密码,建立单循环链表。
输出形式:
建立一个输出函数,将正确的输出序列
2、以学生成绩为数据元素建立一个一维数组。
一个学生的成绩信息包括学号、姓名以及数学、语文、英语3科的成绩。
程序中预定义10位同学的成绩,这些记录按学号有序。
在程序中实现下列功能:
(1)统计每位同学3门课程的平均成绩;
(2)按平均成绩高低进行冒泡排序并显示结果。
4总结
本次课程设计涉及到的范围很广,让本人能够比较系统的对C语言和数据结构进行一次整理和复习。
同时有了很多的体会和经验。
1.巩固了以前学过的C语言的知识,在这次课程设计中我体会到C语言超强的逻辑性,能够熟练使用VC++的编译环境,也对这两门课程有了新的认识,他们既有联系,又相互区别,在编写程序过程中要灵活应用。
2.对数据结构的理解有待加强,算法的知识面也有待于提高。
不同的人会选择不同的算法,所以即使同样的程序,不同的人必然会设计出不同的方案,所以以后的学习生活中,一定要广泛涉猎,掌握更多更好的解决问题的方法。
3.此次设计让我意识到程序设计是脑力劳动和体力劳动相结合的,没有平时基础的训练是不会写出高效的算法。
此次课程设计时间虽短,但却课设的过程是短暂的,但我所收获的是永恒的。
它让我尝到了学习的快乐,成功的喜悦,更让我懂得了不少做人的道理。
要完成一项任务或把东西学好就必须有足够的信心,持久的耐心,有面对困难无所畏惧的精神,这对我日后的学习和生活产生了深远一个影响。
参考文献
1.《数据结构》(用面向对象的方法与C++描述),殷人昆等,清华大学出版社,2009。
2.《算法与数据结构习题精解和实验指导》,宁正元等,清华大学出版社,2007。
3.谭浩强.C程序设计[M].北京:
清华大学出版社,2005。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 数据库 原理 作业