课程设计.docx

上传人:b****2 文档编号:2466943 上传时间:2022-10-29 格式:DOCX 页数:11 大小:102.96KB
下载 相关 举报
课程设计.docx_第1页
第1页 / 共11页
课程设计.docx_第2页
第2页 / 共11页
课程设计.docx_第3页
第3页 / 共11页
课程设计.docx_第4页
第4页 / 共11页
课程设计.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

课程设计.docx

《课程设计.docx》由会员分享,可在线阅读,更多相关《课程设计.docx(11页珍藏版)》请在冰豆网上搜索。

课程设计.docx

课程设计

O

xuexiao

xxxx

 

课程名称:

数据结构课程设计

课程设计题目:

xxx

系:

xxx

专业:

xxxx

年级、班:

xxx

姓名:

xxx

学号:

xxx

指导教师:

xxx

职称:

xxx

 

xxxx年xx月

目录

1、问题描述·················································3

2、基本要求·················································3

3、测试数据·················································3

4、算法思想·················································3

5、模块划分·················································4

6、数据结构·················································4

7、源程序···················································5

8、测试情况·················································9

9、算法的时空分析···········································11

10、参考文献················································11

 

问题描述

设编号为1,2,…,n(n>0)个人按顺时针方向围坐一圈,每人持有一个正整数密码。

开始时任意给出一个报数上限值m,从第一个人开始顺时针方向自1起顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人起重新自1起顺序报数;如此下去,直到所有人全部出列为止。

要求设计一个程序模拟此过程,并给出出列人的编号序列。

(要求使用单循环链表)

基本要求

程序需要按照题目要求使用单循环链表的要求来实现程序功能,首先要建立一个结构体,然后还创建一个单循环链表。

在单循环链表里,需要建立函数来实现题目的需求,首先建立一个函数是运行题目问题的函数,然后还要解决出现结果的函数,即打印单循环链表的函数。

之后又要建立一个结点,即作为下一轮的M值的函数。

最后还需要解决的问题是判断此单循环链表是否为空,即也需要建立一个函数来解决此问题。

此程序必须到达的要求即是既要创建单循环链表链表,还需解决题目的要求。

测试数据

输入初始人员个数为10,然后把10个人附有一个代表的密码位,输入第一个人代表的密码位为1,第二个为2,第三个为3,,第四个为4,依次下去直到第十个人为10。

之后再输入M的初始值为5。

这样一共测试三组数据。

算法思想

程序主要是利用单循环链表的特点来实现题目要求的功能,首先要创建一个单循环链表,然后要实现人数的初始化,及要给每个人附有一个正数的密码位功能,然后就是要实现M值的初始化,即开始的人数是和M值的关系,当一个人数到M值时退出,还要把这个退出的原始密码作为下一轮的M值,从退出人的下一位开始数,M值为退出人的原始密码。

还要程序必须要打印出结果,因此又得构建一个打印函数程序,最后,还需要判断测试的链表是否为空,也要建立一个函数来实现此功能。

模块划分

在此程序中,建立了三个文件,即一个头文件,nodetype.h在此文件中主要解决的问题是建立一个结构体类型typedefstructNodeType,还要声明需要建立的函数。

如下:

voidCreaList(NodeType**,constint);/*创建单向循环链表*/

/*运行"题目"问题*/

voidStatGame(NodeType**,int);

/*打印循环链表*/

voidPrntList(constNodeType*);

/*得到一个结点*/

NodeType*GetNode(constint,constint);

/*测试链表是否为空,空为TRUE,非空为FALSE*/

unsignedEmptyList(constNodeType*);

在源文件nodetype.cpp中即要具体的实现函数功能,

voidCreaList(NodeType**ppHead,constintn)此函数主要是给人数赋予一个初始的密码,完成单循环链表的创建。

voidStatGame(NodeType**ppHead,intiCipher)此函数是解决报数,解决下一个M值的问题,并且得到循环的结果。

voidPrntList(constNodeType*pHead)此函数是打印出循环链表。

NodeType*GetNode(constintiId,constintiCipher)此函数是实现结点问题,为下一步做好空间准备。

unsignedEmptyList(constNodeType*pHead)此函数是判断创建的链表是否为空。

在main.cpp文件中,主要是调用nodetype.h和nodetype.cpp中的东西来实现函数功能。

数据结构

首先在nodetype.h中定义了一个结构体:

typedefstructNodeType

{

intid;

intcipher;

structNodeType*next;

}NodeType;

在此中序列编号id为int类型,密码cipher为int类型,还有一个结构体指针类型,指向下一个地址。

在voidCreaList(NodeType**ppHead,constintn)中,定义了两个int类型的变量iCounter,并且把iFlag复值为1;,还有两个数据结果指针变量,*pNew,和*pCur.

在voidStatGame(NodeType**ppHead,intiCipher)中,定义了两个int类型的变量,还有三个结构体指针,*pPrv,*pCur,*pDel。

在voidPrntList(constNodeType*pHead)中,定义了一个结构体指针指向pHead.

在NodeType*GetNode(constintiId,constintiCipher)中定义了一个结构体指针,*pNew。

在main函数中,定义了两个int型变量,n和m。

还要一个结构体指针*pHead。

源程序

nodetype.h

#include

#include

#include

#include

#include

usingnamespacestd;

#defineMAX_NODE_NUM100

#defineTRUE1U

#defineFALSE0U

typedefstructNodeType

{

intid;

intcipher;

structNodeType*next;

}NodeType;

/*创建单向循环链表*/

voidCreaList(NodeType**,constint);

/*运行"题目"问题*/

voidStatGame(NodeType**,int);

/*打印循环链表*/

voidPrntList(constNodeType*);

/*得到一个结点*/

NodeType*GetNode(constint,constint);

/*测试链表是否为空,空为TRUE,非空为FALSE*/

unsignedEmptyList(constNodeType*);

nodetype.cpp

#include"nodetype.h"

voidCreaList(NodeType**ppHead,constintn)

{

inti,iCipher;

NodeType*pNew,*pCur;

for(i=1;i<=n;i++)

{

cout<<"输入第"<

"<

cin>>iCipher;

pNew=GetNode(i,iCipher);

if(*ppHead==NULL)

{

*ppHead=pCur=pNew;

pCur->next=*ppHead;

}

else

{

pNew->next=pCur->next;

pCur->next=pNew;

pCur=pNew;

}

}

cout<<"完成单向循环链表的创建!

"<

}

voidStatGame(NodeType**ppHead,intiCipher)

{

intiCounter,iFlag=1;

NodeType*pPrv,*pCur,*pDel;

pPrv=pCur=*ppHead;

/*将pPrv初始为指向尾结点,为删除作好准备*/

while(pPrv->next!

=*ppHead)

pPrv=pPrv->next;

while(iFlag)

{

for(iCounter=1;iCounter

{

pPrv=pCur;

pCur=pCur->next;

}

if(pPrv==pCur)

iFlag=0;

pDel=pCur;/*删除pCur指向的结点,即有人出列*/

pPrv->next=pCur->next;

pCur=pCur->next;

iCipher=pDel->cipher;

cout<<"第"<id<<"个人出列,密码:

"<cipher<

free(pDel);

}

*ppHead=NULL;

getchar();

}

voidPrntList(constNodeType*pHead)

{

constNodeType*pCur=pHead;

if(EmptyList(pHead))

return;

do

{

cout<<"第"<id<<"个人,密码:

"<cipher<

pCur=pCur->next;

}while(pCur!

=pHead);

getchar();

}

NodeType*GetNode(constintiId,constintiCipher)

{

NodeType*pNew;

pNew=(NodeType*)malloc(sizeof(NodeType));

if(!

pNew)

{

cout<<"Error,thememoryisnotenough!

"<

exit(-1);

}

pNew->id=iId;

pNew->cipher=iCipher;

pNew->next=NULL;

returnpNew;

}

unsignedEmptyList(constNodeType*pHead)

{

if(!

pHead)

{

cout<<"Thelistis

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1