...体中的node是一个指向结构体的指针,但是对于linklist的
发布网友
发布时间:2024-10-09 17:21
我来回答
共3个回答
热心网友
时间:2024-10-09 18:03
#define DATATYPE2 char
typedef struct node
{DATATYPE2 data;
struct node *next;
}LINKLIST;
这是用C语言描述单链表结构. 第二行中typedef struct node到底是用typedef为一个结构体取一个新的类型名,还是struct node就是一个类型名,现在是用typedef定义一个新的类型名LINKLIST来代替已有的类型名struct node。(LINKLIST是定义的一个变量还是一类型名呢)
还有一个疑问就是第二行中typedef struct node 即然是定义结点类型,那么直接写成struct node 不就行了吗,为什么前面还要加一个typedef呢,这样的意图是什么呢?他是要为这个类型重新取一个新的类型名吗?如果是的话,那后面那个LINKLIST就是新的类型名,而不是一个变量了。对吗?
我刚开始学的时候也是和你一样迷惑不解,现在有点理解了,我说说我的想法吧:
typedef struct node //这里node是结构体的名字
LINKLIST应该是新的类型名,在以后的程序中如果你想定义一个node类型的结构体,那么你就可以这样定义:
LINKLIST ppt; //ppt就是上面结构体的一个变量了
LINKLIST *ppt //ppt就是指向上面结构体的一个指针变量了
至于为什么用typedef struct node而不用struct node 呢,这是因为在C语言中以后你要定义一个结构体变量时,如果你用前者,可以用上面LINKLIST ppt;如果用后者,就不行了,用后者的话,你定义一个结构体变量的话要用struct node ppt;
但在C++中,好像两者都行,你可以编程试试
Link p 就是struct struct node *
即Link == LINKLIST *
所有有typedef的地方,都先把typedef去掉。
如果没有typedef, 很明显LINKLIST是一个struct node 的变量, Link 是 struct node *, nbsp 是 struct node & 的变量
然后,加上typedef。所有的LINKLIST,Link, nbsp都从变量升级成一个类型。
即LINKLIST 是struct node 类型,Link 是 struct node *类型,nbsp是struct node &类型。
热心网友
时间:2024-10-09 18:04
使用 typedef 为现有类型创建同义字
就比如说
typedef struct student
{
char name[20];
}stu;//这里的student 就相当于是stu 重命名了一样 至于你说的linklist 你自己定义的 你总得给出代码看看吧
热心网友
时间:2024-10-09 17:57
每一段代码在在执行前都要经过1、预编译:将头文件与程序主体合成预处理的C程序即.i文件
2、编译形成汇编码也就是我们所说的汇编语言即.s文件
3、汇编就形成了二进制代码即.o文件
4、.o文件通过链接形成可执行文件
typedef就是在链接阶段完成的,注意在这个地方与define的区别,#define是在预编译进行宏替换的,他们是在不同的阶段被处理的。
typedef struct node
{
int data;
struct node* next;
}LNode,*Linklist;
以以上的结构体做例子讲解:
typedef就如同我们在课堂一样,老师叫我们回答问题,不喊我们的名字而是喊我们的学号,用计算机语言表示:typedef 你的名字 学号;
这里你的学号相当于LNode和*Linklist,而你的名字相当于结构体
至于你问Linklist是什么类型,如果在函数前面加上Linklist或LNode*表明你要返回一个节点以便方便其他函数的调用,加在变量前表明该变量是个节点变量,你可以用sizeof(变量)测试该节点所占内存的大小,它的大小同结构体的大小是一致的。
你说的node是不是LNode,如果是的话,LNode*就是Linklist。要是申请地址的话,malloc(LNode)而不是malloc(Linklist),LNode是节点,而Linklist是指针是地址。
具体的理解我的讲解能力有限,不缺乏这样的代码让我们去练,当初我就是一点点理解的,时间长了,就了然了。你还是多编点代码,加上调试更能看清每一步的执行。
如果你说的node不是LNode,你说的结构体中的node,这个“中”字,表明你的问题不够严谨,你应该把你的结构体拿出来让我看一下。我想你的node就是我的LNode。
希望这点讲解对你能够有用,关键还是多编代码。