#include "stdio.h" #include "stdlib.h" #define S sizeof(struct node) struct node { int num; struct node *next; }; typedef struct node NODE; NODE *createlinklist(int n) { NODE *head,*p,*q; int i=1; head=p=(struct node*)malloc(sizeof(struct node)); p->num=i; for(i=2;i<=n;i++) { q=(struct node*)malloc(sizeof(struct node)); if(q==0) return(0); p->next=q; p=q; p->num=i; } p->next=head; /*使链表尾指向链表头 形成循环链表*/ return head; } void printlinklist(NODE *p,int n) { int i; NODE *q = p; if(NULL == q->next){ printf("the list is NULL!"); return; } printf("所有玩家的信息列表:\n"); for(i=1;i<=n;i++) { if(NULL == q){ printf("the list is NULL!"); return; } printf("%d ",p->num); p=p->next; } printf("\n"); } void joseph(NODE *p,int n,int m) { int i,j; NODE *q; for(i=1;i<n;i++) { for(j=1;j<=m-1;j++) { p=p->next; } q=p->next; p->next = q->next; printf("%d ",q->num); free(q); } printf("\n最后剩余的是第%d号.\n",p->num); p->next=NULL; } void main() { NODE *head; int n,m; printf("请输入人数N:\n"); scanf("%d",&n); printf("输入K:\n"); scanf("%d",&m); head=createlinklist(n); printlinklist(head,n); printf("依次被选出的是:\n"); joseph(head,n,m); } |