约瑟夫问题

简介: 约瑟夫问题:#include#include#define OK 1#define ERROR 0#define OVERFLOW -2typedef int status;typedef int ElemType;typedef stru...
约瑟夫问题:
#include<stdio.h>
#include<stdlib.h>

#define OK 1
#define ERROR 0
#define OVERFLOW -2

typedef int status;
typedef int ElemType;

typedef struct CList{
   ElemType location;
   ElemType code;
   struct CList *next;
}CList,*ListPtr;

status InitList(ListPtr *CL);
status ReadList(ListPtr CL);
status Joseph(ListPtr CL);

void main(){
ListPtr L=NULL;
int cmd=0;

printf("******************************************************************\n");
printf("*     InitList--1      ReadList--2      Joseph--3     Exit--0    *\n");
printf("* Enter a operation code : 1, 2, 3, 0                            *\n");
printf("******************************************************************\n");

printf("\n------------------------------------------------------------------\n");
printf("\nOperation:");
scanf("%d",&cmd);

while(cmd!=0){
   switch(cmd){
      case 1:
         InitList(&L);
         break;
      case 2:
         ReadList(L);
         break;
      case 3:
         Joseph(L);
         break;
      }
   printf("\n\n------------------------------------------------------------------\n\n");
   printf("Operation:");
   scanf("%d",&cmd);
  }

}  

status InitList(ListPtr *CL){
   int count=0;
   int size=0;
   int cd=0;
   ListPtr p=NULL;
   ListPtr q=NULL;
   ListPtr r=NULL;

   printf("\nPlease enter the total numbers of people(1--32767):");
   scanf("%d",&size);
   if(size<1||size>32767){
      printf("Please check number(1--32767).\n"); 
      return ERROR;
      }
    else {
      q=malloc(sizeof(CList));
      if(!q)
         exit(OVERFLOW);
      count=1;
      p=q;
      p->location=count;
     
      do{
         printf("\nPlease enter NO.%d person's code:",count);       
         scanf("%d",&cd);
         if(cd<1||cd>32767)
            printf("\nIncorrect data,Try again.\n");
      }while(cd<1||cd>32767);

      p->code=cd;

      while(size>1)
      {
         r=malloc(sizeof(CList));
         if(!r)
            exit(OVERFLOW);
         r->location=++count;

         do{
            printf("\nPlease enter NO.%d person's code:",count);  
            scanf("%d",&cd);
            if(cd<1||cd>32767)
               printf("Incorrect data,try again.\n");
         }while(cd<1||cd>32767);

         r->code=cd;
         q->next=r;  
         q=r;
         size--;
      }

      *CL=q;
      q->next=p;

      return OK;
    }
}


status ReadList(ListPtr CL){
   int count=0;
   ListPtr p=NULL;
   
   if(!CL)
      return ERROR;
   else{
      p=CL->next;
      printf("\n[People:");
      printf("%d",p->location);
      printf("Code:%d]",p->code);
      p=p->next;

      while(p!=CL->next){
         count++; 
         if(count%3==0)
            printf("\n");
         else
            printf("\t");
         printf("[People:");
         printf("%d",p->location);
         printf("Code:%d]",p->code);
         p=p->next;
        }
   return OK;
   }
}

status Joseph(ListPtr CL){
   int n=0;
   int BeginNum=0;
   ListPtr p=NULL;
   ListPtr q=NULL;
   
   if(!CL)
      return ERROR;
   else {

      do{
         printf("\nPlease enter the begin number(1--32767):");
         scanf("%d",&BeginNum);
      if(BeginNum<1||BeginNum>32767)
         printf("\nIncorrect data,Try again.\n");
      }while(BeginNum<1||BeginNum>32767);

      p=CL;

      printf("\n-----------------The Output List is:-----------------------\n");

      while(p!=p->next){
         for(n=1;n<=BeginNum-1;n++)
            p=p->next;
         
         q=p->next;
         printf("%d  ",q->location);
         BeginNum=q->code;
         p->next=q->next;
         free(q); 
        }
      printf("%d  ",p->location);
      return OK;
     }
}

目录
相关文章
|
2月前
|
机器学习/深度学习
约瑟夫环
【10月更文挑战第11天】
69 5
|
2月前
约瑟夫环问题
约瑟夫环
26 0
|
存储 算法
|
7月前
|
存储 算法 C语言
【数据结构与算法】【约瑟夫问题】还在用递归?教你用链表秒杀约瑟夫
【数据结构与算法】【约瑟夫问题】还在用递归?教你用链表秒杀约瑟夫
|
Java
java数据结构26:约瑟夫问题
有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从1开始报数。就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王,编程求输入n,m后,输出最后猴王的编号。
143 0
约瑟夫环问题的几种解法
约瑟夫环问题的几种解法
105 0
PTA猴子选大王(约瑟夫环问题)
PTA猴子选大王(约瑟夫环问题)
131 1
|
算法 索引 Python
细究“约瑟夫环”
细究“约瑟夫环”
100 0
【线性表】洛谷P1996 约瑟夫问题
前言 本题来自洛谷P1996. 题目链接:约瑟夫问题 - 洛谷
91 0