约瑟夫环(c语言指针编写)

思路
**1.**使用两个指针(移动和删除)
**2.**创建单循环链表
**3.**查找并删除

# include <stdio.h>
# include <stdlib.h>
typedef struct Node
{
 int data;
 int num;
 struct Node *next;
};
    struct Node *Create_List(int n)
{
 int c,i=1,j;
 struct Node *rear,*s,*CL;
 CL=(struct Node*)malloc(sizeof(struct Node));
 CL->next=CL;                          
 rear=CL;
 for(j=0;j<n;j++)
 {
  s=(struct Node*)malloc(sizeof(struct Node));
  scanf("%d",&c);
  s->data=c;
  s->num=i;
  i++;
  rear->next=s;
  rear=s;
 }
 rear->next=CL->next ;
 return CL;
}
 struct Node*fun(struct Node *CL,int m)
 {
  int i;
  struct Node *p,*q;
  p=CL;
 for(i=1;i<=m;i++)
 {
  q=p;
  p=p->next;
 }
 printf("%d ",p->num);
 q->next=p->next;
 CL=p;
 return CL;
 }
 void main()
 {
  int n,m,a;
  struct Node*CL;
  printf("请输入m:");
  scanf("%d",&m);
  printf("请输入人数n:");
  scanf("%d",&n);
  printf("请输入每个人的密码:");
  CL=Create_List(n);
  printf("出列的顺序为:");
  CL=fun(CL,m);
  a=n-1;
  while(a!=1)
  {
   CL=fun(CL,CL->data);
   a--;
  }
  printf("\n最后剩下的人:%d",CL->next->num);
  printf("\n"); 
  return 0;
 }


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值