上海大学乐乎博客 > 堕落の空间 > C++ > 以前帮人编写的约瑟夫环的C语言数据结构程序

2007/6/28 14:34:00 | 以前帮人编写的约瑟夫环的C语言数据结构程序

#include <stdio.h>
#include <stdlib.h>

struct jose          //小孩结点
{
   int code;
   int pas;
   jose* next;
};

void main()
{
   //赋初值
   int numOfBoys,interval;
   printf("please input the number of boys,\n interval of counting:\n");   //数小孩个数
   scanf("%d %d",&numOfBoys,&interval);

   //建立小孩结构数组
   jose* pJose=(jose*) malloc(numOfBoys * sizeof(jose));     //从堆内存分配空间
   jose* pCurrent=pJose;     //当前结点指针

   //初始化结构数组:构成环链,小孩编号,输出编号
//   int itemsInLine=0;     //输出项数

   for(int i=1; i<=numOfBoys; i++){
     pCurrent->next=pJose+i%numOfBoys;      //链到下一个元素
     pCurrent->code=i;//小孩编号
printf("%d :",i);
scanf("%d",&pCurrent->pas);
     pCurrent=pCurrent->next;     //改变当前位置
    
   }       //pCurrent此时等于pJose
//   itemsInLine=0;
printf("\n");
   jose* pivot;       //链表哨兵
   pCurrent=&pJose[numOfBoys-1];     //下一个就是数组第一个元素pJose[0]

   while(pCurrent->next!=pCurrent){    //处理未获胜的所有小孩
     for(int j=0; j<interval; j++){         //数interval个小孩
       pivot=pCurrent;
       pCurrent=pivot->next;
}
interval=pCurrent->pas;
     printf("%d\t",pCurrent->code);
     pivot->next = pCurrent->next;     //小孩脱链
     pCurrent=pivot;
   }

   printf("%d\n",pCurrent->code);      //获胜者

   free(pJose);       //返还堆空间
}         //endof main()

评论

有些地方不对,需要修改一下

发布者 李训龙
2009/5/6 22:52:51


lz强的,以前用C语言做过的,搞了几个小时,代码很短

发布者 IT_rookie
2010/9/30 18:34:06


您正在以 匿名用户 的身份发表评论  快速登录
(不得超过 50 个汉字)
(输入完内容可以直接按Ctrl+Enter提交)