关于建立链表时结构体的一些有关问题

关于建立链表时结构体的一些问题
typedef struct ElemType{
float coef;
int expn;
}ElemType;

typedef struct LNode{
ElemType data;
struct LNode *next;
}*LinkList;


自己的理解:例如:LNode List;      LinKList L;     L=&List;
                     那么L为指向List的指针。
问题:1.我的理解的对错
           2.L内的成员data用于存储变量的值还是变量的地址
           3.若把某一地址赋给List内的成员next,那用L如何表示
------解决思路----------------------
1.对的
2.前者
3.LNode temp; L->next = &temp;
------解决思路----------------------
引用:
Quote: 引用:

1.对的
2.前者
3.LNode temp; L->next = &temp;

Status MakeNode(LinKList *L, ElemType e){
LinKList *q;
LinKList *p=L;
q = (LinKList *)malloc(sizeof(LinKList));
if (!q) exit(OVERFLOW);
(*q)->data = e;
(*q)->next = NULL;
while (NULL != *p)
{
L = p;
*p = (*L)->next;
}
(*L)->next = *q;
return OK;
}

这段代码在(*q)->data = e;会出错,是什么原因呢?


q是一个指向结构体的指针,如果对q进行了解引用,*q就是该指针所指向的结构体的对象,如果需要使用成员的话,请使用点操作符。所以应该是q->data, (*q).data这样使用结构中的成员。
------解决思路----------------------
typedef struct LNode{
ElemType data;
struct LNode *next;
}*LinkList;
这句typedef已经将LinkList变为LNode*的别名了,所以你上面在定义p的时候直接LinkList p就行了,在加个*就是二级指针了。
------解决思路----------------------
引用:
Quote: 引用:

typedef struct LNode{
ElemType data;
struct LNode *next;
}*LinkList;
这句typedef已经将LinkList变为LNode*的别名了,所以你上面在定义p的时候直接LinkList p就行了,在加个*就是二级指针了。


谢谢你的回答,以下还有几个问题:
若修改为:
typedef struct ElemType{
     float coef;
     int expn;
}ElemType;

typedef struct LNode{
     ElemType data;
     struct LNode *next;
}*Link;

typedef struct {
     Link head,tail;
     int len;
}LinkList;
定义LinkList L;

1.L的tail成员中的data成员的coef的值应该如何表示
2.之前我学习的是谭浩强的书,没有关于结构体这方面的详细知识,请问在哪些书中有这方面的详细知识


L是个结构体变量,所以L.tail  tail是个指向结构体的指针,所以tail->data, data也是个结构体变量,所以data.coef。所以就是L.tail->data.coef谭老师的书看完之后可以看下c primer plus期间可以看下郝斌的C语言的视频教程。之后看看c和指针和c陷阱与缺陷。我也是去年才开始学编程的,这也是我自己的学习路线。之后准备学啥就看你自己的喜好了,我之后又去学了c++,前段时间才看完c++primer,准备再看一遍。还有传智播客的网上有很多免费的视频,感觉讲的挺好的,有功夫可以去看看有什么自己想看的视频。谭老师的书看一遍就够,反正就是个领你上个道儿,后续的书籍也可以参考论坛里很多大神们推荐的书籍,看个2,3遍肯定是要的。