常见C语言面试题之十一:约瑟夫环

 
  1. #include "stdafx.h"
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. typedef struct node
  5. {
  6.   int data;
  7.   struct node* next;
  8. }LNode;
  9. LNode* Create(int n, int k) //创建循环链表
  10. {
  11.   int start=k-1;
  12.   if(start==0) start = n;
  13.   LNode *s, *p, *L=NULL, *t;
  14.   while(n!=0)
  15.   {
  16.     s = (LNode*)malloc(sizeof(LNode));
  17.     if(L==NULL) p=s;
  18.     if(n==start) t=s;
  19.     s->data = n;
  20.     s->next = L;
  21.     L=s;
  22.     n--;
  23.   }
  24.   p->next = L;
  25.   return t;
  26. }
  27. LNode* GetNode(LNode *p)
  28. {
  29.   LNode *q;
  30.   for(q=p;q->next!=p;q=q->next);
  31.   q->next = p->next;
  32.   free (p);
  33.   return (q);
  34. }
  35. int Print(LNode *p, int m)
  36. {
  37.   int i;
  38.   printf("出队编号:/n");
  39.   while(p->next!=p)
  40.   {
  41.     for(i=1;i<=m;i++)
  42.     {
  43.       p=p->next;
  44.     }
  45.     printf("%3d",p->data);
  46.     p = GetNode(p);
  47.   }
  48.   printf("%3d/n", p->data);
  49.   return 0;
  50. int _tmain(int argc, _TCHAR* argv[])
  51. {
  52.     LNode *p;
  53.   int n,k,m;
  54.   
  55.   do
  56.   {
  57.     printf("输入总人数:");
  58.     scanf("%d",&n);
  59.   }while(n<0);
  60.   do
  61.   {
  62.     printf("输入开始人的序号1~%d:",n);
  63.     scanf("%d",&k);
  64.   }while(k<=0||k>n);
  65.   do
  66.   {
  67.     printf("输入间隔数字:");
  68.     scanf("%d",&m);
  69.   }while(m<=0);
  70.   p=Create(n,k);
  71.   Print(p,m);
  72.   
  73.   return 0;
  74. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值