代码:
#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"); }