经过“选出猴王”对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;
}
 
相关文章
相关标签/搜索