資料結構-約瑟夫問題
阿新 • • 發佈:2018-12-14
#include<stdio.h> #include<stdlib.h> int list_len = 0; typedef struct note { int xuhao; struct note *next; }linklist_t; linklist_t * creat_linklist() { linklist_t * h ; h = (linklist_t *)malloc(sizeof(linklist_t)); h->xuhao=1; h->next = h; list_len ++; return h; } void append_linklist(linklist_t *h,int value) { linklist_t *p; p = (linklist_t *)malloc(sizeof(linklist_t)); p->xuhao = value; p->next = h->next; h->next = p; list_len++; } void linklist_t_show(linklist_t *h) { linklist_t *p = h; int i; for(i=0;i<list_len;i++) { printf("%d ",p->xuhao); p = p->next; } printf("\n"); } int remove_linklist(linklist_t *h,int value) { linklist_t *p = h; linklist_t *q = NULL; int i; for(i=0;i<list_len;i++) { if (p->next->xuhao == value) { q = p->next; p->next =p->next->next; free(q); list_len--; break; } p = p->next; } return list_len; } void joseph_linklist(linklist_t *h,int begin,int len) { linklist_t *p = h ; int i,j ,num=1; for(i=1;i<begin;i++) { p = p->next; } while(num>0) { for(j=1;j<len;j++) { p = p->next; } printf("%-3d",p->xuhao); num = remove_linklist(h,p->xuhao); p = p->next; } printf("\n"); } int main() { linklist_t *H =creat_linklist(); int i,ret; for(i=8;i>1;i--) { append_linklist(H,i); } linklist_t_show(H); joseph_linklist(H,3,4); return 0; }