/************************************************************************* > File Name: josefu.c > Author: Baniel Gao > Mail: createchance@163.com > Blog: blog.csdn.net/createchance > Created Time: Thu 19 Dec 2013 03:08:21 PM CST ************************************************************************/ #include#include typedef struct josefu { int data; struct josefu *next; } josefu_list; josefu_list *josefu_init(int num); josefu_list *josefu_begin(josefu_list *list, int rule); josefu_list *josefu_node(int num); int josefu_free(josefu_list *list); int main(void) { josefu_list *list; int num, rule; puts("Please input number and rules: "); scanf("%d%d", &num, &rule); list = josefu_init(num); list = josefu_begin(list, rule); josefu_free(list); return 0; } josefu_list *josefu_init(int num) { int i; josefu_list *new; josefu_list *list = josefu_node(1); for(i = num; i > 1; i--) { new = josefu_node(i); new->next = list->next; list->next = new; } return list; } josefu_list *josefu_node(int num) { josefu_list *p = NULL; p = (josefu_list *)malloc(sizeof(josefu_list)); p->data = num; p->next = p; return p; } josefu_list *josefu_begin(josefu_list *list, int rule) { int counter; josefu_list *tmp = NULL; for(counter = 1; list->next != list; counter++) { if(counter == rule - 1) { tmp = list->next; list->next = tmp->next; free(tmp); counter = 0; josefu_show(list); } list = list->next; } return list; } int josefu_show(josefu_list *list) { josefu_list *p = list; if(list == NULL) return 0; do { printf("%5d",p->data); p = p->next; } while(list != p); putchar('\n'); } int josefu_free(josefu_list *list) { free(list); return 0; }
运行实例: