注册 登录
编程论坛 C语言论坛

关于链式存储用C语言实现的疑问

fishxiaoyun 发布于 2020-09-13 12:55, 1674 次点击
c语言学了一点皮毛,在看数据结构的时候,老师讲的链式存储
用c来实现可以用以下代码。
不明白结构体内的那个指针是什么意思,如何实现指向下一个节点的地址。
谢谢。
typedef struct LNode
{
        int data;
        struct LNode *next;//这个指针指向的是哪?什么意思?
}LNode;
        LNode *L;
        L=(LNode*)malloc(sizeof(LNode));//这里的(LNode*)是什么意思?
        A->next=B;
        B->next=C;
7 回复
#2
纯蓝之刃2020-09-13 19:58
struct LNode *next; 是指向下一个结构的首地址,这样就可以通过next->data访问下一个节点的数据了,而next->next->data就是访问下下节点的数据,以此类推形成一条链的访问形式。
L=(LNode*)malloc(sizeof(LNode));malloc()会返回一块空间的首地址,而(LNode*)就是将指针的访问类型转换成LNode类型,L+1访问的是sizeof(LNode)长度之后的地址,这样就将这块空间分成了LNode结构大小的一块一块的去访问了。
#3
八画小子2020-09-13 22:15
可以先画个示意图看看。图中的箭头其实就是C代码中的指针。
#4
fishxiaoyun2020-09-14 05:52
结构体内定义的指针struct LNode *next; 不是指向了LNode结构体本身么?
还是说*next是固定的一个格式,就是表示指向下一个节点?
*next可以换成*p或者*a什么的其他指针变量么?
L=(LNode*)malloc(sizeof(LNode));这句有点看懂了。
是不是把malloc分配的空间强制转换成LNode的类型。
#5
fishxiaoyun2020-09-14 09:30

是不是通过struct LNode实例化几个变量A,B,C
再用
        A->next=B;
        B->next=C;
来实现A的指针分量指向B,B的指针分量指向C这种链式存储结构
#6
纯蓝之刃2020-09-14 09:34
struct LNode *next只是一个指针,指向一块空间的首地址,这块空间是使用malloc申请的LNode结构大小的空间。*next只是指针名字,换成任意的就可以。
LNode L0,*L1,*L2,*L3;                        //假设L0为链表头
        L1=(LNode*)malloc(sizeof(LNode));        //L1为申请的LNode大小空间的首地址
        L0.next=L1;                                //这样L0内的next就指向了L1申请的空间,通过L0.next就可以访问L1节点内的内容了。
        L2=(LNode*)malloc(sizeof(LNode));        //L1为申请的LNode大小空间的首地址
        L1->next=L2;                                //这样L1内的next就指向了L2申请的空间,通过L1->next就可以访问L2节点内的内容了,在这里L1->next也可以使用L0.next->next。这样以此列推就可以通过L0的一级一级往下链接访问这个数据结构了。
#7
lin51616782020-09-14 09:40
回复 5楼 fishxiaoyun
是的 这样做就是链表了
#8
fishxiaoyun2020-09-15 05:14
回复 6楼 纯蓝之刃
谢谢版主,讲的很详细了
这次我明白了,其实就是指针的灵活运用。
学到了几个知识点,非常感谢。
1