引入
一句话,输出动态链表,就是输出链表中的各个节点。
例子引入
上一节,我们已经大概知道了,如何使用头指针输出第一个结点,那么该如何输出其它结点呢?我们来写一个输出链表的函数 print。
#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
解析
其实输出很简单,就是根据指针进行输出。
困难的是,如何切换到下一个结点。
p=p->next;
//这里赋值的是地址,所以 p 就会像存储的下一个地址移动了
重要的就是把下一个结点的地址,传递给当前负责输出的指针。
尾巴
这是我的个人学习笔记,主要是应付考研复习使用,充斥着一些吐槽和个人观点,并不严谨,欢迎大家参考、指正。
评论