81.链表——发展1

文章讨论了上一篇博客中程序的局限性,主要在于固定的空间分配和不灵活的数据表示。为了解决这些问题,提出了使用动态内存分配来创建人名卡片结构(peoplecard),允许在运行时根据用户输入确定所需内存。代码示例展示了如何使用C语言的`malloc`函数分配内存,并通过`manage_gets`函数获取用户输入的人名和年龄,创建一个可变大小的人员列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链表是怎么发展来的2

在上一篇博客中,其中的程序缺点明显,存在浪费空间的问题,人名限制不太严格不满足需求,人员总数量对有些公司来说太小。

总结:数据表示不够灵活,程序在编译时就已经确定了所需的内存空间大小,对此如果能在程序运行时确定会更好。

  • 解决方法:使用动态内存分配来表示数据,解决思路如下图:
    在这里插入图片描述
    在这里插入图片描述
#include <stdio.h>
#include <string.h>
#define 	NAME_SIZE 20//人名字符大小

typedef struct peoplecard
{
	char name[NAME_SIZE];
int age;
}

char* manage_gets(char str[],int len_limt);
int main(void)
{
	int  pnum, i;
	int j;
	peoplecard* peol;
	
	printf(“ Enter the people num:\n”);
	scanf(%d”,&n);
	peol = (peoplecard*)malloc(n*sizeof(peoplecard));
	puts(“Enter first peol name”);//输入第一个人员的名字
	while((i < n)&&( manage_gets(peol[i].name, NAME_SIZE)!=NULL) &&( peol[i].name[0]!=’\0))
{
	puts(“Enter your age <0-200>:);
	scanf(%d”,& peol[i++].age);
	while(getchar()!=’\n’)
{
	continue;
}
puts(“Enter next people name(empty line to stop):);
}

if(i==0)
{
	puts(“No data enter!);
}
else
{
	printf(“ Here is the people list:\n”);
	for(j=0;j<i;j++)//是小于i而不是i+1,因为在前面i会多加一次。
	{
		printf(“people :%s, age:%d\n”, peol[j].name, peol[j].age);
}
printf(“end!\n”);
}

return 0;
}

char* manage_gets(char str[],int len_limt)
{
	char* ret_val;
	char* find;
	ret_val = fgets(str,len_limt,stdin);
	if(ret_val)
	{
		find = strchr(str,’\0);
		if(find)
{
	*find = ‘\0;
}
else
	{
	while(getchar()!=’\n’)
	{
		continue;
}
}
}
return ret_val;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiawucha159

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值