数据结构课程设计.docx
- 文档编号:7752938
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:12
- 大小:70.94KB
数据结构课程设计.docx
《数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计.docx(12页珍藏版)》请在冰豆网上搜索。
数据结构课程设计
目录
1、课程设计的目的……………………………………………………………………1
2、课程设计的要求……………………………………………………………………1
3、课程设计的方案……………………………………………………………………1
4、课程设计的内容……………………………………………………………………1
4.1设计的内容……………………………………………………………………1
4.2算法思路………………………………………………………………………1
4.2.1算法的内容…………………………………………………………………2
4.2.2算法中函数的流程图………………………………………………………5
4.3程序调试与测试以及结果的分析……………………………………………6
4.3.1程序调试……………………………………………………………………6
4.3.2程序测试……………………………………………………………………6
4.3.3结果分析……………………………………………………………………7
4.4程序源代码……………………………………………………………………7
5、总结………………………………………………………………………………11
参考文献……………………………………………………………………………11
纸牌游戏
1、课程设计的目的
(1)了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;
(2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
(3)提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
(4)训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风;
2、课程设计的要求
(1)设计的课题能够体现数据结构和算法的算法分析、设计、算法实现。
(2)根据自己对数据结构和算法的基本概念、原理和机制的理解,自拟题目和设计内容,选题尽可能结合实际的应用。
3、课程设计的方案
纸牌游戏具体内容如下:
编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后,从第4张开始,以4为基数,是4的倍数的牌翻一次,直到最后一张牌;再依次5的倍数的牌翻一次,6的,7的直到以52为基数的牌翻过,输出,这时正面向上的牌有哪些?
运行程序,进入用户选择界面,用户选择1输出52张牌编号和最后正面向上牌的编号;用户选择2输出要求输入牌数,用户输入牌数后,输出所有牌的编号和最后正面向牌的编号;用户选择0退出执行程序;用户输入其他信息时,输出错误信息提示并要求用户重新选择操作。
4、课程设计的内容
4.1设计的内容
因为要有编号为1-52张纸牌,则需要先创建链表,运用mallac函数申请内存空间,存储纸牌编号信息;然后设计翻牌程序,利用j%i==0的思想,使用指针存储最后正面向上的牌编号;最后编写主函数,判断链表建立是否成功,输出全部纸牌编号与程序运行结果,让用户能够直接的看到求解结果。
4.2算法思路
4.2.1算法的内容
(1)定义node节点,用于存储单张牌的信息。
structnode//定义结点
{
intdata;
intkey;/*标志位*/
structnode*next;
}
(2)创建链表建立creat()函数,用于建立和存储所有纸牌编号,运用malloc函数申请内存空间时若申请失败,输出相应提示信息。
structnode*creat()//定义链表建立函数creat()
{
structnode*p,*head,*s;//其返回值为结构指针
inti;
head=NULL;//初始化
p=(structnode*)malloc(sizeof(*p));
if(p==NULL)
{
printf("Memoryistoosmall!
\n");
}
head=p;
head->key=1;
head->data=1;
head->next=NULL;
for(i=2;i<=n;i++)//建立n个结点的链表
{
s=(structnode*)malloc(sizeof(*p));
s->data=i;s->key=1;
p->next=s;p=s;//p=s->next;
}
p->next=NULL;
return(head);
}
(3)建立fanpai()函数,利用j%i==0的思想,使用指针存储最后正面向上的牌编号。
voidfanpai(structnode*p)
{
structnode*p1,*p2;
for(p1=p->next;p1!
=NULL;p1=p1->next)
{
for(p2=p1;p2!
=NULL;p2=p2->next)
{
if(p2->data%p1->data==0)
{
if(p2->key==0)
p2->key=1;
elsep2->key=0;
}
}
}
}
(4)建立obj()函数,用于创建有n张纸牌信息的链表并输出最后正面向上的纸牌编号。
voidobj()
{structnode*head,*np;
head=creat();
printf("显示全部纸牌编号:
");
if(head==NULL)
printf("Creatlinkerror!
\n");
else
for(np=head;np!
=NULL;np=np->next)
{
printf("%4d",np->data);
}
fanpai(head);
printf("\n最后正面向上的纸牌编号为:
\n");
for(np=head;np!
=NULL;np=np->next)
{
if(np->key==1)
printf("%4d",np->data);
}
}
(5)最后编写main()主函数,输出用户选择界面,并对错误输入输出提示信息,完成总的设计任务。
voidmain()
{charch;
cout<<"\n\t\t\t纸牌游戏"< cout<<"\t\t----------------------------------"< cout<<"\t\t1标准52张牌2任意输入牌数0退出"< cout<<"\t\t----------------------------------"< cout< "; cin>>ch; switch(ch) { case'1': obj();main();break; case'2': cout<<"请输入牌数: "; cin>>n; obj(); main(); break; case'0': cout<<"确定退出(y/n)? : "; cin>>ch; if(ch=='y'||ch=='Y') exit(0); main(); break; default: a: cout<<"输入错误,是否继续操作(y/n)? : "; cin>>ch; if(ch=='y'||ch=='Y') main(); if(ch=='n'||ch=='N') exit(0); gotoa; break; }} 4.2.2算法中函数的流程图 翻牌函数: p1=p1->next p2=p2->next p2->data%p1->data==0 p2->key==0 p2->key=1p2->key=0 函数的调用关系图: 4.3程序调试与测试以及结果的分析 4.3.1程序调试 在结点定义中没有定义data导致错误,修改后运行正常。 4.3.2程序测试 (1)用户输入1,输出52张纸牌编号和最后正面向上的纸牌编号: (2)用户输入2,提示用户输入纸牌数目,输出任意个数纸牌的编号和最后正面向上的纸牌编号: (3)用户输入0,提示用户是否确定退出,用户输入y后,退出程序执行: (4)用户输入错误字符时,提示输入错误: 4.3.3结果分析 本程序最后采用比较简单算法实现,时间复杂度仅为O(n)。 4.4源程序代码 /*纸牌游戏源程序*/ #include #include #include #include structnode//定义结点 { intdata; intkey;/*标志位*/ structnode*next; }; intn=52; structnode*creat()//定义链表建立函数creat() { structnode*p,*head,*s;//其返回值为结构指针 inti; head=NULL;//初始化 p=(structnode*)malloc(sizeof(*p)); if(p==NULL) { printf("Memoryistoosmall! \n"); } head=p; head->key=1; head->data=1; head->next=NULL; for(i=2;i<=n;i++)//建立52个结点的链表 { s=(structnode*)malloc(sizeof(*p)); s->data=i;s->key=1; p->next=s;p=s;//p=s->next; } p->next=NULL; return(head); } voidfanpai(structnode*p) { structnode*p1,*p2; for(p1=p->next;p1! =NULL;p1=p1->next) { for(p2=p1;p2! =NULL;p2=p2->next) { if(p2->data%p1->data==0) { if(p2->key==0) p2->key=1; elsep2->key=0; } } } } voidobj() {structnode*head,*np; head=creat(); printf("显示全部纸牌编号: "); if(head==NULL) printf("Creatlinkerror! \n"); else for(np=head;np! =NULL;np=np->next) { printf("%4d",np->data); } fanpai(head); printf("\n最后正面向上的纸牌编号为: \n"); for(np=head;np! =NULL;np=np->next) { if(np->key==1) printf("%4d",np->data); } } voidmain() {charch; cout<<"\n\t\t\t纸牌游戏"< cout<<"\t\t----------------------------------"< cout<<"\t\t1标准52张牌2任意输入牌数0退出"< cout<<"\t\t----------------------------------"< cout< "; cin>>ch; switch(ch) { case'1': obj();main();break; case'2': cout<<"请输入牌数: "; cin>>n; obj();main();break; case'0': cout<<"确定退出(y/n)? : "; cin>>ch; if(ch=='y'||ch=='Y') exit(0); main();break; default: a: cout<<"输入错误,是否继续操作(y/n)? : "; cin>>ch; if(ch=='y'||ch=='Y') main(); if(ch=='n'||ch=='N') exit(0); gotoa;break; } } 5、总结 通过这次数据结构课程设计,我受益匪浅。 对链表这种数据结构有了更深刻的认识,对《数据结构》这门课有了更浓厚的兴趣。 并且在以后得学习当中会更注重课本内容的学习,只有掌握基础才可以有所突破和进步,同时很多问题也是一些很基础的知识所叠加累计,所以真正把基础学得炉火纯青,相信面对任何问题,我都不会再害怕! 参考文献 [1]数据结构(C语言版),严蔚敏、吴伟民编著,清华大学出版社 [2]C语言程序设计(第二版),谭浩强、张温基等编著,高等教育出版社 [3]C++面向对象程序设计,谭浩强编著,清华出版社,中国铁道出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计