C语言中有关链表的基础知识
3个回答
展开全部
举个例子:假设你想到C的家中拿一样东西,但你不知道C家的地址,不过,你知道A家的地址,A家有B的地址,B有C的地址,
所以,你到A处找到B的地址,再去B处找到C的地址,就知道C的地址了。链表就是这个意思,每一个元素都保存有下一个元素的地址,根据这个地址,你可以依次找到最后一个元素,故形成了一个链。
这个代码,重点就在于结构体,结构体名是:node
其中包含两个成员变量,一个是
int类型的数据,一个就是
例子中的
“
地址
”,这个
“
地址
”
是一个变量的地址,而这个变量又是你定义的结构体
node
的存储位置,而这个变量又包含两个变量(int数据和
“
地址
”
),这样就形成了链表。
以后你会知道这种
‘
地址
’
就是一种变量
叫
指针。
所以,你到A处找到B的地址,再去B处找到C的地址,就知道C的地址了。链表就是这个意思,每一个元素都保存有下一个元素的地址,根据这个地址,你可以依次找到最后一个元素,故形成了一个链。
这个代码,重点就在于结构体,结构体名是:node
其中包含两个成员变量,一个是
int类型的数据,一个就是
例子中的
“
地址
”,这个
“
地址
”
是一个变量的地址,而这个变量又是你定义的结构体
node
的存储位置,而这个变量又包含两个变量(int数据和
“
地址
”
),这样就形成了链表。
以后你会知道这种
‘
地址
’
就是一种变量
叫
指针。
展开全部
链表的关键就在这里:
struct
node
*
pnext;
你要遍历的时候,可以通过pnext获得下一个struct
node的地址。
比如struct
node
a,它的下一个是struct
node
b,这样,a->pnext
=
&b
struct
node
*
pnext;
你要遍历的时候,可以通过pnext获得下一个struct
node的地址。
比如struct
node
a,它的下一个是struct
node
b,这样,a->pnext
=
&b
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
#include<stdlib.h>
#define
len
sizeof(struct
person)
struct
person
{
int
num;
struct
person
*next;
}*p1,*p2,*head=0;
main()
{
int
i,n;
scanf("%d",&n);
p2=head=(struct
person
*)malloc(len);
p2->num=1;
for(i=2;i<=n;i++)
{
p1=(struct
person
*)malloc(len);
p1->num=i;
p2->next=p1;
p2=p1;
}
p1->next=head;
printf("%d
",head->num);//这里先输出表头元素的值.
for(p1=head->next;p1!=head;p1=p1->next)//这里不能p++的,因为链表不是连续存放的.
printf("%d
",p1->num);
printf("\n");
}
#include<stdlib.h>
#define
len
sizeof(struct
person)
struct
person
{
int
num;
struct
person
*next;
}*p1,*p2,*head=0;
main()
{
int
i,n;
scanf("%d",&n);
p2=head=(struct
person
*)malloc(len);
p2->num=1;
for(i=2;i<=n;i++)
{
p1=(struct
person
*)malloc(len);
p1->num=i;
p2->next=p1;
p2=p1;
}
p1->next=head;
printf("%d
",head->num);//这里先输出表头元素的值.
for(p1=head->next;p1!=head;p1=p1->next)//这里不能p++的,因为链表不是连续存放的.
printf("%d
",p1->num);
printf("\n");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询