关于带头结点的单链表初始化问题
#include<stdio.h>#include<stdlib.h>typedefintElemType;typedefstructnode{ElemTypedata;...
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct node
{
ElemType data;
struct node *Next;
}LNode;
typedef LNode* LinkedList;
void LinkedListInit1(LinkedList L);
//主函数
void main()
{
LinkedList L;
LinkedListInit1(L);
}
//其余函数
void LinkedListInit1(LinkedList L)
{
L=(LNode *)malloc(sizeof(LNode)); if(L==NULL)
{
printf("申请空间失败!\n");
exit(0);
}
L->Next=NULL;
}
问题:为什么链表L没有被初始化?不是用的地址传递吗?
还是LinkedList L这个指针变量本身需要申请内存空间?
但是对于指针变量,编译系统不是应该会自动分配内存空间吗?难道还需要人为通过malloc函数申请内存空间吗? 展开
#include <stdlib.h>
typedef int ElemType;
typedef struct node
{
ElemType data;
struct node *Next;
}LNode;
typedef LNode* LinkedList;
void LinkedListInit1(LinkedList L);
//主函数
void main()
{
LinkedList L;
LinkedListInit1(L);
}
//其余函数
void LinkedListInit1(LinkedList L)
{
L=(LNode *)malloc(sizeof(LNode)); if(L==NULL)
{
printf("申请空间失败!\n");
exit(0);
}
L->Next=NULL;
}
问题:为什么链表L没有被初始化?不是用的地址传递吗?
还是LinkedList L这个指针变量本身需要申请内存空间?
但是对于指针变量,编译系统不是应该会自动分配内存空间吗?难道还需要人为通过malloc函数申请内存空间吗? 展开
4个回答
展开全部
问题就出在这一句,
L=(LNode *)malloc(sizeof(LNode));
这里的L是LinkedListInit1函数的形参,也就是局部变量,函数运行结束后就不存在了,而你在main函数中的调用过程根本没有改变实参L的数值,没有将初始化的空间传出来,以上代码修改如下:
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct node
{
ElemType data;
struct node *Next;
} LNode;
typedef LNode* LinkedList;
LinkedList LinkedListInit1();
//主函数
void main()
{
LinkedList L=LinkedListInit1();
}
//其余函数
LinkedList LinkedListInit1()
{
LinkedList L=(LNode *)malloc(sizeof(LNode));
if(L==NULL)
{
printf("申请空间失败!\n");
exit(0);
}
L->Next=NULL;
return L;
}
L=(LNode *)malloc(sizeof(LNode));
这里的L是LinkedListInit1函数的形参,也就是局部变量,函数运行结束后就不存在了,而你在main函数中的调用过程根本没有改变实参L的数值,没有将初始化的空间传出来,以上代码修改如下:
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct node
{
ElemType data;
struct node *Next;
} LNode;
typedef LNode* LinkedList;
LinkedList LinkedListInit1();
//主函数
void main()
{
LinkedList L=LinkedListInit1();
}
//其余函数
LinkedList LinkedListInit1()
{
LinkedList L=(LNode *)malloc(sizeof(LNode));
if(L==NULL)
{
printf("申请空间失败!\n");
exit(0);
}
L->Next=NULL;
return L;
}
追问
我修改的不是头结点的地址吗?对地址操作还需要传回主调函数吗?这个和数组的传递不是一个道理吗?
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
展开全部
不懂!你要上百度看看
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
哈哈哈还盖茨哈哈哈哈彼此彼此彼此猜哈查查哈比比白皑皑亲住亲住人陪在真是我是在真是也破哈哈哈彼此彼此吧还差还差彼此彼此爱财干海菜会嘎嘎嘎也破也破也破也破也破也破也破哈哈哈哈彼此彼此彼此猜哈查查哈比比白皑皑亲住亲住人陪在真是我是在真是也破哈哈哈还好还好亲住亲住人陪在真是我是在真是也破不会就不会亲住亲住人陪在真是我是在真是也破不会就不会亲住亲住人陪在真是我是在真是也破不会就不会亲住亲住人陪在真是我是在真是也破不会就不会亲住亲住人陪在真是我是在真是也破不会就不会亲住亲住人陪在真是我是在真是也破?亲住亲住人陪在真是我是在真是也破不会就不会亲住亲住人陪在真是我是在真是也破?亲住亲住人陪在真是我是在真是也破不会就不会亲住亲住人陪在真是我是在真是也破?亲住亲住人陪在真是我是在真是也破
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我们前几天数据结构刚好上机做这个实验,下面是我写的代码,除了最后的链表逆转没做之外,其他的挺符合你的要求的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询