约瑟夫环问题

xiaoxiao2021-02-27  209

代码:

#include<stdio.h>  

#include<math.h>   #include<conio.h> #define OVERFLOW -1 typedef int Elemtype;/*定义数据元素类型*/ /*数据类型定义*/ typedef struct Cnode { Elemtype data; struct Cnode *next; }CNode; CNode *joseph;/*定义一个全局变量*/ /*创建单循环链表函数*/ int Create_clist(CNode *clist,int n) { CNode *p,*q; int i; clist=NULL; for(i=n;i>=1;i--) { p=(CNode *)malloc(sizeof(CNode)); if(p==NULL)     return OVERFLOW;/*存储分配失败*/ p->data=i; p->next=clist; clist=p; if(i==n)     q=p; } q->next=clist; joseph=clist; return 1; } int Joseph(CNode *clist,int m,int n,int k) { int i; CNode *p,*q; if(m>n) return -1; if(!Create_clist(clist,n)) return -1; p=joseph; for(i=1;i<m;i++) p=p->next; while(p) { for(i=1;i<k-1;i++) p=p->next; q=p->next; printf("%d",q->data); printf(" "); if(p->next==p) p=NULL; else { p->next=q->next; p=p->next; free(q); } } clist=NULL; return 1; } void main() { int m,n,k; CNode *clist; clist=NULL; printf("\n请输入围坐在圆桌周围的人数 n: "); scanf("%d",&n); printf("请输入第一次开始报数人的位置 m: "); scanf("%d",&m); printf("请输入报数为多少的人出列?"); scanf("%d",&k); Create_clist(clist,n); printf("出列的顺序如下:\n"); Joseph(clist,m,n,k); printf("\n"); }
转载请注明原文地址: https://www.6miu.com/read-11070.html

最新回复(0)