今天讨论一下有关结构体的问题。
开门见山,直接上代码
typedef struct node
{
int data;
struct node * next;
}node,*linklist;
这是实现一个单链表结构体的节点的定义。
第一个小问题,结构体出现了3个node,第一个node,指明结构体的名称,英文教材的tag就是这个意思,它出现在这个位置就有一个作用,为了定义结构体内的*next指针,这也正是第二个node出现的原因,一般来说定义一个新结构体的格式有这种方式:
struct 结构体名 变量名;
第二个node,也就是这个意思;第三个node;和typedef有关系,意思就是把这个结构体变成一个名为node的新类型。和前两个node没有一点关系,只是名字相同而已。当然在这里,*linklist与node等价,也是一种类型名。可以直接使用它来创建变量。
第二个小问题,这位定义链表节点的哥们儿为什么搞两个类型名,*linklist与node。刚开始我想一个不就完了,用有点画蛇添足了。刚开始一直不解,后来,我也看到只定义一个的类型名。所以我的理解就是,定义两个,应该有两个好处:1、方便,node,*linklist;这两个一个带*符号,一个是普通形式.2、便于理解;名称也隐含一定信息,可读性可能好点。