- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
静态链表的应用设计_数据结构设计
信息科学与技术学院
数据结构课程设计报告
题目名称: 静态链表的应用设计 专业班级: 计算机科学与技术08(1)班 学生姓名: 卓德茂 学生学号: 2008082222 指导教师: 高 攀
完成日期:2010-03
目 录
1、课程设计导引 3
1.1课程设计的目的 错误!未定义书签。
1.2题目要求 错误!未定义书签。
2.课程设计的实验报告内容 错误!未定义书签。
3.课程设计的原程序代码 5
4.运行结果 8
5. 课程设计总结 8
6.参考书目 9
课程设计导引
1.1课程设计的目的
在前一年C++学习及掌握的基础上,运用这个学期数据结构的知识,对程序设计的要求进行分析与设计,以期能实现知识的学到到熟识到真正实践。在做设计的过程中,要正对自己遇到的问题,学会怎么解决的迎面而对,认识旁边的每个人、每本书、每件事对你所做的类似思想运行方式,活用我们掌握的,能用我们所要的,冲破阻挡我们的。对这所选的题目,是一个静态链表的应用,在静态链表知识上根据要求正确相应运用编写设计。
1.2题目要求(C++题目三十七)
编写程序JOSEPHUS。N(100)个小孩围成一圈,并给他们依次编号,老师指定从第S个小孩开始报数,报到第M个小孩出列,然后从下一个小孩开始报数,依次重复下去,直到所有的孩子都出列,试输出小孩的出列顺序。
要求:
( 1) N、S、M从命令行输入,将小孩的出列顺序输出到屏幕。
(2) 用结构数组实现:
struct child
{
int nextp; /* 指向下一个小孩 */
int num; /* 小孩的号码 */
} link[100];
2课程设计的实验报告内容
题目要求要100的孩子围成一圈并给他们依次编号,刚好是静态链表中有数据的指针域首尾相连。作函数:creat_link(n,link);
如:
1 2 2 3 3 4 4 5 5 6 6 7 7 1
分析s和m的可能情况:
极限的,当s、m都为1时,即从第一个孩子开始报数,报到1就出列,要是这种情况就直接按编号顺序出列:
for(i=1;i=n;i++)
{ if(i10i%10==1) coutendl;
coutsetw(4)i;
}
否则,设平p、q分别指向报数的孩子和前一个孩子,这样就能保证当p指向的孩子出列时,能把他的前一个孩子和后面的孩子连起来。这样的话,当找到要出列的孩子时,只要link[q].nextp=link[q].nextp就再能连起来。
这里要注意的是:一般q指向报数前一个孩子q=p-1;
但是当从第一个孩子开始报数时,q=n;
3、最后就是输入输出的设计,调用creat_link(n,link);和a(s,n,m, link);都在其域内
3课程设计的原程序代码
#include iostream
#include iomanip
using namespace std;
struct child
{
int nextp; /* 指向下一个小孩 */
int num; /* 小孩的号码 */
} link[100];
void creat_link(int n,child *link)
{
int i;
for(i=1;in;i++)
{
link[i].num=i;
link[i].nextp=i+1;
}
link[n].num=n;
link[n].nextp=1;
}
int a(int s,int n,int m, child *link) //第S个小孩开始报数,报到第m个小孩出列
{ //n(100)个小孩围成一圈
int i=1;
int j=0;
int p,q;
coutn个孩子从第s个小孩开始报数,报到第m个小孩出列的顺序是:endlendl;
if(m==1s%n==1){
for(i=1;i=n;i++)
{
if(i10i%10==1) coutendl;
coutsetw(4)i;
}
coutendlendl;
return 0;
}
p=s%n;
if(s%n==1) q=n;
else
q=p-1;
while(jn)
{
if(i==m)
{if(j=10j%10==0) cou
文档评论(0)