程序设计课程设计报告Word下载.docx
《程序设计课程设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《程序设计课程设计报告Word下载.docx(7页珍藏版)》请在冰豆网上搜索。
一直报到k,凡报到k的人出列。
试输出该问题中顺序出列的人的名字。
二、功能描述
创建单循环链表函数:
chain*circulchain(char
*ch)
销毁链表:
voidDestroy(chain*head)显示链表中每个结点的数据:
voidShow(chain^head)
插入结点函数:
voidAddNode(chain*head,charx,chary)
删除结点函数:
voidDeleNode(chain*head,charx)
三、程序实现
1、单链表的基本操作:
#include<
iostream>
usingnamespacestd;
structchain
{
chardata;
chain*next;
};
chain*crechain(char*ch)〃创建单链表
inti;
chain*head=NULL,*p=NULL,*q=
NULL;
for(i=0;
ch[i]!
=W;
i++){
p=newchain;
p->
data=ch[i];
if(head==NULL)
head=p;
}
else
q->
next=p;
q=P;
q・>
next=NULL;
return(head);
voidAddNode(chaincharx,chary)/*
插入结点*/
chain*s;
cout«
1f链表为空!
1vendl;
r=head;
while(r!
=NULL)
if(r->
data!
=x)
r=r->
next;
elsebreak;
if(r==NULL)
"
没有数据为x的节点!
n«
endl;
s=newchain;
s->
data=y;
next=r->
r->
next=s;
voidDeleNode(chain*head,charx)/*删除结点*/
chain*p=head,*s;
'
vvendl;
if(head->
data==x)
head=p->
deletep;
while(p->
next!
=NULL){
if(p->
next->
=x)p=p->
s=p->
p->
next=s->
deletes;
break;
}voidShow(chain*head)//输出链表{
chain*p;
p=head;
while(p!
data;
p=p->
H\nH;
voidDestroy(chain*head)〃销毁链表
while(head!
head=p->
deletep;
}intmain()
chain*head;
head=crechain(Habcdn);
Show(head);
AddNode(head,T);
DeleNode(headJc'
);
Destroy(head);
return0;
2、单循环链表:
chain*circulchain(char*ch)
chain*head=NULL,*p=NULL,NULL,*r;
for(i=0;
i++)
q->
next=p;
q=p;
next=head;
return(head);
3、约瑟夫问题:
#include<
structJoseph
charch;
Joseph*next;
};
Joseph*head,//Joseph结构指针,全局变量
voidcreate(intn)〃给每个结点数据赋值{
Joseph*q;
p=(Joseph*)malloc(sizeof(Joseph));
ch='
A'
;
next=NULL;
for(i=1;
i<
n;
〃将p结点加到链表尾部
〃让q指向链表尾部结
ch=A+i;
q->
点
tail=q;
tail->
next=head;
voidDisplay(intm)〃依次输出出列的人的名字
intx=0;
q=tail;
do
p=q->
next;
//p赋值为q相邻的
下一个结点
X++;
if(x%m==0)
n出列的人为"
vvp->
chvvendl;
next=p->
p=NULL;
elseq=p;
〃q指向相邻的下一
结点p
while(q!
=q->
next);
〃剩余结点数不为1,
则继续循环
head=q;
intn,m;
head=NULL;
cin»
n;
f请输入间隔\n"
cin»
m;
create(n);
Display(m);
coutvv"
最后一个人是"
vvhead・>
chvvendl;
deletehead;