数据结构约瑟夫环c++程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//2014113214徐福辉

#include

#include

#include

#define ListSize 100

typedefint DataType;

typedefstruct Node

{

DataType data;

struct Node *next;

}ListNode,*LinkList;

LinkList CreateCycList(int n);//创建一个长度为n的循环单链表

void Josephus(LinkList head,int n,int m,int s);//在单链表中,报到m的人出列

void DisplayCycList(LinkList head);//输出循环单链表

void main()

{

LinkList h;

int n,s,m;

printf("输入环中人数:");

scanf("%d",&n);

printf("输入开始报数的序号");

scanf("%d",&s);

printf("报数为m的人出列");

scanf("%d",&m);

h=CreateCycList(n);

Josephus(h,n,m,s);

}

void Josephus(LinkList head,int n,int m,int s)//在长度为n的单链表中,从第s个人开始报数,数到m的人出列

{

ListNode *p,*q;

int i;

p=head;

for(i=1;i

{

q=p;

p=p->next;

}

while(p->next!=p)

{

for(i=1;i

{

q=p;

p=p->next;

}

q->next=p->next;//将p指向的结点删除,也就是报数为m的人出列

printf("%4d\n",p->data);

free(p);

p=q->next;//p指向下一个结点,重新开始报数

}

printf("%4d\n",p->data);

}

LinkList CreateCycList(int n)

{

LinkList head=NULL;

ListNode *s,*r;

int i;

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

{

s=(ListNode*)malloc(sizeof(ListNode));

s->data=i;

s->next=NULL;

if(head==NULL)

head=s;

else

r->next=s;

r=s;

}

r->next=head;

return head;

}

相关文档
最新文档