C语言中建立数据类型-输出动态链表-学习笔记-52

引入

一句话,输出动态链表,就是输出链表中的各个节点。

例子引入

上一节,我们已经大概知道了,如何使用头指针输出第一个结点,那么该如何输出其它结点呢?我们来写一个输出链表的函数 print。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(struct Student)
struct Student{
long num;
float score;
struct Student *next;
};

int n;

struct *Student create(void){
struct Student *p1,*p2,*head;
p1=p2=(struct Student*)malloc(LEN);
scanf("%ld %f",&p1->num,&p1->score);
while(p1->num!=0){
n=n+1;
if(n==1){
head=p1;
}else{
p2->next=p1;
}
p2=p1;
p1=(struct Student*)malloc(LEN);
scanf("%ld %f",&p1->num,&p1->score);
}
p2->next=NULL;
return (head);
}

void print(struct Student *stu){
//传递过来的是 head 头指针
do{
printf("\n学号:%ld\n成绩:%3.1f\n\n",stu->num,stu->score);
stu=stu->next; //如果 stu 指向的是 NULL,方便停止。
}while (stu->next!=NULL);
}

int main(){
struct Student *pt;
pt=create();
print(pt);
return 0;
}

结果

输入:
0101001 66.7
101002 68.8
101003 98.4
0 0

学号:101001
成绩:66.7

学号:101002
成绩:68.8

学号:101003
成绩:98.4

解析

其实输出很简单,就是根据指针进行输出。
困难的是,如何切换到下一个结点。

1
2
p=p->next;
//这里赋值的是地址,所以 p 就会像存储的下一个地址移动了

重要的就是把下一个结点的地址,传递给当前负责输出的指针。

尾巴

这是我的个人学习笔记,主要是应付考研复习使用,充斥着一些吐槽和个人观点,并不严谨,欢迎大家参考、指正。


-------------The End-------------
欢迎请我喝咖啡哦~!