• 约瑟夫环问题


    3.约瑟夫环问题

      1 #include<stdio.h>
      2 #include<stdlib.h>
      3 #define  MAXSIZE  30
      4 typedef int DataType;
      5 
      6 typedef  struct  node 
      7 {   
      8     DataType  data[MAXSIZE];
      9     int  length;
     10 } SeqList,* PSeqList;
     11 //typedef SeqList* PSeqList;
     12 
     13 
     14 PSeqList  Init_SeqList( );
     15 PSeqList  Create_SeqList(PSeqList PL);
     16 int josephus_SeqList (PSeqList  josephus_seq, int s, int m);
     17 int Delete_SeqList(PSeqList PL,int i);
     18 Print_SeqList(PSeqList PL);
     19 
     20 main()
     21 {
     22    int t=1;
     23    int s,m;
     24    int op;
     25    //DataType x;
     26    //int flag;
     27    //int l;
     28    PSeqList PL;
     29    
     30          
     31    while(t)
     32        {
     33             printf("
    
    
    
    ");
     34             printf("			---顺序表---
    ");
     35             printf("
    			*******************************************");
     36             printf("
    			*          1---初始化及创建               *");
     37             printf("
    			*          2---约瑟夫环                   *");            
     38             printf("
    			*          0---退     出                  *");
     39             printf("
    			*******************************************");
     40             printf("			请选择菜单号(0--2):");
     41             scanf("%d",&op);
     42             switch(op)
     43             {
     44    
     45                 case 1:
     46                     PL=Init_SeqList();//初始化顺序表
     47                     PL=Create_SeqList(PL);
     48                     printf("新创建的顺序表为:
    ");
     49                     Print_SeqList(PL);
     50                     break;
     51                     
     52                 case 2:
     53                     printf("请输入s和m的值:
    ");
     54                     scanf("%d,%d",&s,&m);
     55                     josephus_SeqList (PL, s, m);
     56 
     57                     
     58                     break;
     59 
     60                 
     61                 case 0:
     62                       t=0;
     63                       printf("
    			程序结束!
    ");
     64                       break;
     65           
     66                 default: 
     67                     printf("
    				输入错误!请重新输入!
    ");
     68                     break;
     69 
     70               }
     71                    
     72         }
     73 
     74 
     75 }
     76 
     77 
     78 
     79 PSeqList  Init_SeqList(void)
     80 {  /*创建一顺序表,入口参数无,返回一个指向顺序表的指针,指针值为零表示分配空间失败*/
     81    PSeqList  PL;
     82    PL=( PSeqList )malloc(sizeof(SeqList)); 
     83    if (PL)       /*若PL=0表示分配失败*/
     84         PL->length=0;     
     85    return (PL);
     86 } 
     87 
     88 PSeqList  Create_SeqList(PSeqList PL)
     89 {
     90        int i,n;
     91        printf("请输入需初始化的元素个数
    ");
     92        scanf("%d",&n);
     93        printf("请输入%d个整数,中间用空格隔开:
    ",n);
     94        for(i=0;i<n;i++)//输入10个整数
     95        { 
     96            scanf("%d",&PL->data[i]);
     97            PL->length++; 
     98        }
     99        return (PL);
    100 
    101 
    102 }
    103 
    104 int josephus_SeqList (PSeqList  josephus_seq, int s, int m)
    105 {  
    106     int s1,i,w;
    107     if (!josephus_seq->length)
    108     {
    109          printf("表中无元素"); 
    110          return (0);
    111     }
    112     s1=s-1;   /*data数组中下标从0开始*/
    113     printf("输出约瑟夫序列:");
    114    
    115     for(i=josephus_seq->length; i>0; i--)
    116     {  
    117        s1=(s1+m-1)%i;   /*找到出列元素的下标*/
    118        w=josephus_seq->data[s1];
    119        printf("%d	", w);
    120        Delete_SeqList(josephus_seq,s1+1);  //
    121     } 
    122     return(1);//
    123 }
    124 
    125 
    126 int Delete_SeqList(PSeqList PL,int i)
    127 {  /*顺序表删除,入口参数:顺序表指针,删除元素位置,返回标志1表示成功,0表示删除位置不合法,-1表示表不存在*/
    128     int  j;
    129     if (! PL)
    130     { 
    131        printf("表不存在"); 
    132        return(-1);    /*表不存在,不能删除元素*/
    133     }
    134     if(i<1 || i> PL -> length)  /*检查删除位置的合法性*/
    135     {  
    136         printf ("删除位置不合法"); 
    137         return(0);
    138     } 
    139     //*x= PL ->data[i-1];
    140     for(j=i;j< PL -> length; j++)
    141          PL ->data[j-1]=PL ->data[j];    //向上移动
    142     PL-> length --;    
    143     return (1);        /*删除成功*/
    144 }
    145 
    146 
    147 Print_SeqList(PSeqList PL)
    148 {
    149     int i;
    150     if(!PL)
    151     {
    152         printf("无此顺序表");
    153         return -1;
    154     }
    155     if(PL->length==0)
    156     {
    157         printf("空表");
    158         return 0;
    159     }
    160 
    161     printf("顺序表的长度为%d
    ",PL->length);
    162     printf("顺序表的各元素值为:");
    163     for(i=0;i<=PL->length-1;i++)
    164         printf("%4d",PL->data[i]);
    165     return 1;
    166 
    167 }
  • 相关阅读:
    jq常用操作
    Vue过滤器
    NodeJS跨域问题
    js获取url参数(通用方法)
    jq动画实现左右滑动
    vue-cli3.0 gui(一)
    微信小程序无法定位
    java连接数据库报了ssl连接的警告
    node——module.exports
    node——Commonjs
  • 原文地址:https://www.cnblogs.com/panxinqi/p/6586756.html
Copyright © 2020-2023  润新知