静态列表与动态列表
- 指向结构体的指针不指向结构体成员,因为类型不同
- 定义动态链表,需要约定好链表结束的条件。
- 动态链表: 让p1指向新开辟的结点,p2指向链表最后一个结点,把p1所指的结点连接在p2所指的结点后面。
- 用malloc开辟结点1(n=1),使p1指向它。
1
p1 = (struct Name *) malloc (Name长度);
- 输入节点数据;
- 链入结点2(n=2),p1的值赋给p2 -> next,此时p2指向第一个节点,故 p2 -> next = p1 将结点2的地址赋给结点1的 next;
- 使 p2 = p1,即使p2指向新结点。在建立链表的循环中,例1是
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22struct Student* creat()
{
struct Student *p1, *p2, *head;
n = 0;
p1 = p2 = (struct Student *)malloc(Len);
scanf("%d%d",&(*p1).num, &(*p1).age);
head = NULL;
while((*p1).num != 0)
{
n++;
if(n == 1)
head = p1;
else
(*p2).next = p1; //这里跟我的顺序不太一样,可以思考一下
p2 = p1;
p1 = (struct Student *)malloc(Len);
// p2 = p1;
scanf("%d%d",&(*p1).num, &(*p1).age);
}
(*p2).next = NULL;
return head;
}
- 连接
- 创建
- 赋值(此时p2在旧结点p1在新结点)
1 | struct Student* creat() |
在建立链表的循环中,例2是
- 创建
- 链接
- 赋值(此时p2与p1都在新结点)