约瑟夫环C语言

王朝c/c++·作者佚名  2008-06-01
宽屏版  字体: |||超大  

这是小弟的实验报告

/*约瑟夫环*/

#include <stdlib.h>

#include <stdio.h>

typedef strUCt node

{

int data;

struct node *next;

}LNode;

main()

{

LNode* Create(int,int);

LNode* GetNode(LNode *);

int Print(LNode *,int);

LNode *p;

int n,k,m;

do

{

printf ("输入总人数");

scanf ("%d",&n);

}

while (n<=0);

do

{

printf ("输入开始人的序号(1~%d)",n);

scanf ("%d",&k);

}

while (k<=0 k>n);

do

{

printf ("输入间隔数字");

scanf ("%d",&m);

}

while(m<=0);

p=Create(n,k);

Print(p,m);

return 0;

};

LNode* Create(int n,int k)/*创建循环链表*/

{

int start=k-1;

LNode *s,*p,*L=0,*t;

if (start==0) start=n;

while (n!=0)

{

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

if (L==0) p=s;

if (n==start) t=s;

s->data=n;

s->next=L;

L=s;

n--;

}

p->next=L;

return t;

}

LNode* GetNode(LNode *p)/*出队函数*/

{

LNode *q;

for (q=p;q->next!=p;q=q->next);

q->next=p->next;

free (p);

return (q);

}

Print(LNode *p,int m)/*输出函数*/

{

int i;

printf ("出队编号:\n");

while (p->next!=p)

{

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

p=p->next;

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

p=GetNode(p);

}

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

return 0;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有