C语言算法实现约瑟夫环1

/*约瑟夫环*/

#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;
}

转载于:https://www.cnblogs.com/glc400/archive/2009/03/28/4473828.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值