MY数据结构.docx
- 文档编号:24992599
- 上传时间:2023-06-03
- 格式:DOCX
- 页数:24
- 大小:425.11KB
MY数据结构.docx
《MY数据结构.docx》由会员分享,可在线阅读,更多相关《MY数据结构.docx(24页珍藏版)》请在冰豆网上搜索。
MY数据结构
海南大学信息科学技术学院
数据结构课程设计
摘要
随着计算机的普遍应用与日益发展,其应用早已不局限于简单的数值运算,而涉及到问题的分析、数据结构框架的设计以及设计最短路线等复杂的非数值处理和操作。
算法与数据结构的学习就是为以后利用计算机资源高效地开发非数值处理的计算机程序打下坚实的理论、方法和技术基础。
算法与数据结构旨在分析研究计算机加工的数据对象的特性,以便选择适当的数据结构和存储结构,从而使建立在其上的解决问题的算法达到最优。
数据结构是在整个计算机科学与技术领域上广泛被使用的术语。
它用来反映一个数据的内部构成,即一个数据由那些成分数据构成,以什么方式构成,呈什么结构。
数据结构有逻辑上的数据结构和物理上的数据结构之分。
逻辑上的数据结构反映成分数据之间的逻辑关系,而物理上的数据结构反映成分数据在计算机内部的存储安排。
数据结构是数据存在的形式。
《数据结构》主要介绍一些最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论。
数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。
学习数据结构是为了将实际问题中所涉及的对象在计算机中表示出来并对它们进行处理。
通过课程设计可以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高。
一.设计目的
数据结构作为一门学科主要研究数据的各种逻辑结构和存储结构,以及对数据的各种操作。
因此,主要有三个方面的内容:
数据的逻辑结构;数据的物理存储结构;对数据的操作(或算法)。
通常,算法的设计取决于数据的逻辑结构,算法的实现取决于数据的物理存储结构。
数据结构是信息的一种组织方式,其目的是为了提高算法的效率,它通常与一组算法的集合相对应,通过这组算法集合可以对数据结构中的数据进行某种操作。
在当今信息时代,信息技术己成为当代知识经济的核心技术。
我们时刻都在和数据打交道。
比如人们在外出工作时找最短路径,在银行查询存款、通过互联网查新闻、以及远程教育报名等,所有这些都在与数据发生关系。
实际上,现实世界中的实体经过抽象以后,就可以成为计算机上所处理的数据。
数据结构课程主要是研究非数值计算的程序设计问题中所出现的计算机操作对象以及它们之间的关系和操作的学科。
数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。
学习数据结构是为了将实际问题中所涉及的对象在计算机中表示出来并对它们进行处理。
通过课程设计可以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高。
通过此次课程设计主要达到以下目的:
♦了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;
♦初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
♦提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
♦训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
2.需求分析:
现在学校的宿舍管理非常混乱,往往换一个宿舍要找N个地方签名确认,而且各个宿舍情况未知,经过学校正规程序搬宿舍分成那个麻烦,所以我设计了一个宿舍管理系统,以方便宿舍管理。
3.问题描述
设计一个系统可供查询师生查询学校宿舍状况。
这个系统必须有以下功能:
(1)信息的录入或增加:
包括楼号,宿舍号,宿舍容纳人数,现在入住多少人。
(2)删除某个人的信息:
信息录入的逆过程。
(3)修改:
可供随时修改宿舍数据,以供方便实时更新数据。
(4)查询:
对输入宿舍数据实时查询,以为学校安排宿舍方便。
查询有包括多种查询:
如对整个数据的查询,又可以对一个宿舍查询。
(5)保存:
数据的保存,把录入的数据保存下来以供下次使用。
(6)退出系统
4.概要设计
1,系统实现:
本系统采用单链表的结构来实现以上问题描述的功能。
本来需要惟一确定一个宿舍必须要知道楼号(int型)和宿舍号(int型)合在一起储存在id(long型,前两字节储存楼号,后两字节储存宿舍号)的结构里面,后面显示,修改需要可以通过以为或者与结构来实现数据的更改,所以可以采用单链,而不是通过两个双链(楼号链,宿舍号链)来实现,使数据设计起来更方便,也好设计。
2,系统框图实现:
3,具体系统:
(1)系统数据类型定义:
typedefstructnode{/*定义结构体类型dnode*/
longid;/*楼号和房间号,因为一个楼号加一个房间号才能唯一定位一个房间,前两个字节存楼号,后两个字节存房间号*/
intarea;/*面积*/
intmax;/*所容纳人数*/
intcurrent;/*已入住人数*/
structnode*prior,*next;/*前驱和后继指针*/
}dnode;
(2)系统子程序模块:
1)voidoutput_one(dnode*n)/*输出一条记录*/
2)voidoutput()/*输出所有记录*/
3)voidsort()
4)intinsert()/*插入一条数据*/
5)intdelete()/*删除一条记录*/
6)intamend()/*修改已入住人数*/
7)voidsearch()/*查找*/
8)voidsave()/*保存*/
(3)主函数调用:
intmain()
{
while
(1)
{
intselect;
//clrscr();
system("cls");
printf("\n\t\t\tRoommanagesystem\n\n");
printf("\t\t\t\t1addroom\n");
printf("\t\t\t\t2deleteroom\n");
printf("\t\t\t\t3editroom\n");
printf("\t\t\t\t4browseroom\n");
printf("\t\t\t\t5queryroom\n");
printf("\t\t\t\t6sortbycurrent\n");
printf("\t\t\t\t7save\n");
printf("\t\t\t\t0quit\n");
fflush(stdin);
scanf("%d",&select);
switch(select)
{
case1:
insert();
break;
case2:
delete();
break;
case3:
amend();
break;
case4:
output();
break;
case5:
search();
break;
case6:
sort();
break;
case7:
save();
case0:
return0;
}
printf("pressanykeytocontinue...\n");
getch();
}
return0;
}
通过界面提示,输入数字来实现子函数的调用,使用相关操作来实现管理宿舍的功能。
详细设计请参考MY.C程序
五,程序调试
(1)编写程序时应该很小心,不能把符号弄混淆,而且特别是一些数据类型要注意是有时候whie条件中什么p->data!
='',注意在编译程序中是否敲了空格键,一旦不敲空格键,程序控制条件错了,但是程序格式是对的,程序编译器检查不出来是哪错了,出来结构又不对。
想在几百行的程序里面找出来一个没有编译器提示的错误是很难的。
(2)编写程序是要注意数据类型要匹配,不然运行后会出现很多错误。
六.功能说明以及操作
1,数据添加输入功能:
打开程序,输入数字1,然后添加信息:
楼号,宿舍号,面积,容纳人数现住人数。
2,数据的删除:
输入数字键2,然后输入想删除的楼号,宿舍号。
3,数据的修改:
输入数字键3,然后直接修改相关宿舍的信息。
4,数据的浏览:
输入数字键4,就出来了宿舍信息。
5,数据查询:
直接查询某一宿舍信息。
输入数字键5,然后输入想要查询宿舍的楼号和宿舍号,就可以查询到信息.
6,现存的数据的浏览:
输入数字键6,就可以浏览相关信息。
7,保存数据:
保存相关数据,输入数字键7,保存数据在所设定的磁盘内。
8,退出:
输入数字键0,退出系统。
七.心得体会
通过课程设计自己对《数据结构》这门课程有了更深一层的了解,意识到了数据结构的重要性,同时也对c语言的掌握更进一步,熟悉了对于指针,链表,队列等的操作,
对程序设计的过程也有了自己的一些理解:
首先,要对到手的问题要认真思考,如何实现,用何种方法实现,力求最简,在保证正确性的基础上提高程序效率;其次,确定了实现的方法之后就要用程序语言将想法表示出来;最后,进行调试和排错,一个有效的方法是在前面遇到问题时在旁边加上必要的注释,进行调试的时候可以尽快看清问题所在。
参考文献:
[1]田鲁怀,数据结构,电子工业出版社
[2]严蔚敏,吴伟民,《数据结构》,清华大学出版社
[3]潭浩强,《C程序设计》,清华大学出版社
附录:
源程序:
#include
#include
#include
#include
/*采用双向链表结构,方便添加删除和排序*/
typedefstructnode{/*定义结构体类型dnode*/
longid;/*楼号和房间号,因为一个楼号加一个房间号才能唯一定位一个房间,前两个字节存楼号,后两个字节存房间号*/
intarea;/*面积*/
intmax;/*所容纳人数*/
intcurrent;/*已入住人数*/
structnode*prior,*next;/*前驱和后继指针*/
}dnode;
dnode*head=NULL;
voidoutput_one(dnode*n)/*输出一条记录*/
{
intlou;
introom;
room=n->id&0xffff;
lou=n->id>>16;
printf("%d\t%d\t%d\t%d\t%d\n",lou,room,n->area,n->max,n->current);
}
voidoutput()/*输出所有记录*/
{
dnode*pos=head;
if(head==NULL)
{printf("norecord\n");
return;
}
printf("lou\troom\tarea\tmax\tcurrent\n");
while(pos)
{output_one(pos);/*循环调用output_one*/
pos=pos->next;
}
}
voidsort()
{intmax=0,i;
dnode*pos=head;
if(head==NULL)
{printf("norecord\n");
return;
}
while(pos)
{if(pos->current>max)
max=pos->current;
pos=pos->next;
}
printf("lou\troom\tarea\tmax\tcurrent\n");
for(i=max;i>=0;i--)
{pos=head;
while(pos)
{if(pos->current==i)
output_one(pos);/*循环调用output_one*/
pos=pos->next;
}
}
}
intinsert()/*插入一条数据*/
{intlou;
introom;
longlouL;
dnode*pos=head;
dnode*n=malloc(sizeof(dnode));
n->prior=NULL;
n->next=NULL;
//楼号、房间号、面积、所容纳人数、已入住人数
printf("building:
");
scanf("%d",&lou);
printf("room:
");
scanf("%d",&room);
printf("area:
");
scanf("%d",&n->area);
printf("max:
");
scanf("%d",&n->max);
printf("current:
");
scanf("%d",&n->current);
louL=lou;
louL=louL<<16;
n->id=louL+room;
if(head==NULL)/*如果还没有头节点,就作为头节点*/
{head=n;
return1;
}
while(pos)
{if(pos->id>n->id)/*按顺序查找,如果找到比自己大的,就插在它前面*/
{if(pos->prior)
pos->prior->next=n;
n->prior=pos->prior;
pos->prior=n;
if(pos->next)
pos->next->prior=n;
n->next=pos;
if(pos==head)
head=n;
return1;
}
elseif(pos->id==n->id)
{free(n);
return0;/*有重复数据,插入不成功*/
}
if(!
pos->next)/*如果已经到链表尾部,插入到后面*/
{pos->next=n;
n->prior=pos;
return1;
}
pos=pos->next;
}
return1;
}
intdelete()/*删除一条记录*/
{longid;
intlou;
introom;
dnode*pos=head;
printf("building:
");
scanf("%d",&lou);
printf("room:
");
scanf("%d",&room);
id=lou;
id<<=16;
id+=room;
if(head==NULL)
{printf("norecord\n");
return0;
}
while(pos)
{if(pos->id==id)/*找到匹配的项,进行删除*/
{if(pos->prior)
pos->prior->next=pos->next;
if(pos->next)
pos->next->prior=pos->prior;
if(pos==head)
head=pos->next;
free(pos);
return1;
}
pos=pos->next;
}
printf("norecord\n");
return0;
}
intamend()/*修改已入住人数*/
{intcount;
longid;
intlou;
introom;
dnode*pos=head;
printf("building:
");
scanf("%d",&lou);
printf("room:
");
scanf("%d",&room);
printf("current");
scanf("%d",&count);
id=lou;
id<<=16;
id+=room;
if(head==NULL)
{printf("norecord\n");
return0;
}
while(pos)
{if(pos->id==id)
{pos->current=count;
return1;
}
pos=pos->next;
}
printf("norecord\n");
return0;
}
voidsearch()/*查找*/
{longid;
intlou;
introom;
dnode*pos=head;
printf("building:
");
scanf("%d",&lou);
printf("room:
");
scanf("%d",&room);
id=lou;
id<<=16;
id+=room;
if(head==NULL)
{printf("norecord\n");
return;
}
printf("lou\troom\tarea\tmax\tcurrent\n");
while(pos)
{if(pos->id==id)
{output_one(pos);/*找到就打印*/
return;
}
pos=pos->next;
}
printf("norecord\n");
}
voidsave()
{
typedefstructnode{
intid;
intarea;
intmax;
intcurrent;
structnode*prior,*next;
}dnode;
structnodeyang;
FILE*fp;
clrscr();
if((fp=fopen("d:
\\yqz.txt","r"))==NULL)
{
fclose(fp);
printf("Thisfileisnotexist!
\n");
printf("Inputdata:
");
scanf("%d%d%d%d",&yang.id,&yang.area,&yang.max,&yang.current);
fp=fopen("d:
\\yqz.txt","w");
fprintf(fp,"%d%d%d%d",&yang.id,&yang.area,&yang.max,&yang.current);
fclose(fp);
}
else
{
fclose(fp);
fp=fopen("d:
\\yqz.txt","r");
fscanf(fp,"%d%d%d%d",&yang.id,&yang.area,&yang.max,&yang.current);
printf("%d%d%d%d",&yang.id,&yang.area,&yang.max,&yang.current);
fclose(fp);
}
getch();
}
intmain()
{while
(1)
{intselect;
//clrscr();
system("cls");
printf("\n\n\n\n\t\t\t******Roommanagesystem******\n\n");
printf("\t\t\t\t1addroom\n");
printf("\t\t\t\t2deleteroom\n");
printf("\t\t\t\t3editroom\n");
printf("\t\t\t\t4browseroom\n");
printf("\t\t\t\t5queryroom\n");
printf("\t\t\t\t6sortbycurrent\n");
printf("\t\t\t\t7save\n");
printf("\t\t\t\t0quit\n\n");
printf("\t\t\t******************************\n\n");
printf("\t\t\tpleaseinputrhenumber0~7:
");
fflush(stdin);
scanf("%d",&select);
switch(select)
{
case1:
insert();break;
case2:
delete();break;
case3:
amend();
break;
case4:
output();
break;
case5:
search();
break;
case6:
sort();
break;
case7:
save();
case0:
return0;
}
printf("pressanykeytocontinue...\n");
getch();
}
return0;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MY 数据结构