最近在惡補c語言,昨天在作一個「選出猴王」的小練習題,應該也有人遇到過這個題,大概就是好多猴子圍成一圈,編成號,從1-N,而後從1號開始報數,順時針猴子依次報數加1,若是有猴子報的數字是M則出列,下只猴子繼續從1號開始報數,依次循環,最後一個出列的就是猴王,原本這道題感受也不怎麼難,想着用一個循環鏈表就能夠搞定,可是在用到結構體的時候就出現問題了,請各位大蝦們給小弟指點迷津一下。 ide
代碼以下: code
#include<stdio.h> #include<stdlib.h> typedef struct List{ int data; struct List *next; }*monkey; int main(void) { struct List *start,*Monkey,*end; int count = 1,NumofMonkey,stride,i; printf("請輸入猴子的總數:"); scanf("%d",&NumofMonkey); printf("請輸入出局的數字:"); scanf("%d",&stride); start = NULL; for(i=0;i<NumofMonkey;i++){ Monkey = (struct List*)malloc(sizeof(struct List)); //若是寫成Monkey = (monkey)malloc(sizeof(monkey));就有問題了 //如今就搞不懂該如何來動態分配空間了,求指導! Monkey->data = i+1; if(start == NULL){ start = end = Monkey; start->next= start; } else{ Monkey->next = end->next ; end->next = Monkey; end = Monkey; } } while(start != NULL){ if(start->next == start){ printf("%4d\n",start->data); free(start); start->next = NULL; break; } if(count == stride-1){ Monkey = start->next; start->next = Monkey->next; printf("%4d",Monkey->data); free(Monkey); Monkey->next = NULL; count = 0; } count++; start = start->next ; } return 0; }