回 帖 发 新 帖 刷新版面

主题:请教一个关于线性表中描述单链表结构的问题?

#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就是新的类型名,而不是一个变量了。对吗?

回复列表 (共4个回复)

沙发

我刚开始学的时候也是和你一样迷惑不解,现在有点理解了,我说说我的想法吧:
typedef struct node //这里node是结构体的名字
LINKLIST应该是新的类型名,在以后的程序中如果你想定义一个node类型的结构体,那么你就可以这样定义:
LINKLIST ppt; //ppt就是上面结构体的一个变量了
LINKLIST *ppt //ppt就是指向上面结构体的一个指针变量了
至于为什么用typedef struct node而不用struct node 呢,这是因为在C语言中以后你要定义一个结构体变量时,如果你用前者,可以用上面LINKLIST ppt;如果用后者,就不行了,用后者的话,你定义一个结构体变量的话要用struct node ppt;
但在C++中,好像两者都行,你可以编程试试

板凳

#define DATATYPE2 char 
typedef struct node 
{DATATYPE2 data; 
struct node *next; 
}LINKLIST[color=FF0000],*Link;[/color] 这个又是什么意思呢?不明白

3 楼

[quote]#define DATATYPE2 char 
typedef struct node 
{DATATYPE2 data; 
struct node *next; 
}LINKLIST[color=FF0000],*Link;[/color] 这个又是什么意思呢?不明白
[/quote]

*Link 指的是结构体的对象是指针型,比如你定义一个
Link *p;
当你需要用结构体中的类型时可以用p->data,p->next;

4 楼

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 &类型。

我来回复

您尚未登录,请登录后再回复。点此登录或注册