通过“选出猴王”对struct产生一点疑问,请各位大虾讲解一下。

本文详细解析了使用C语言动态分配内存时遇到的问题,特别是对于如何正确使用`malloc()`函数分配和释放内存的讨论。通过实例演示,旨在帮助初学者避免常见的内存管理陷阱。

最近在恶补c语言,昨天在做一个“选出猴王”的小练习题,应该也有人遇到过这个题,大概就是好多猴子围成一圈,编成号,从1-N,然后从1号开始报数,顺时针猴子依次报数加1,如果有猴子报的数字是M则出列,下只猴子继续从1号开始报数,依次循环,最后一个出列的就是猴王,本来这道题感觉也不怎么难,想着用一个循环链表就可以搞定,但是在用到结构体的时候就出现问题了,请各位大虾们给小弟指点迷津一下。

代码如下:

#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;
}
 

转载于:https://my.oschina.net/u/266587/blog/88078

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值