經過「選出猴王」對struct產生一點疑問,請各位大蝦講解一下。

最近在惡補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;
}
 
相關文章
相關標籤/搜索