C 输出节点内容
在接下来的时间里面,我们准备为大家介绍"输出节点内容"。
(1)在链表中有多个节点,那么,我们如何在链表中找到每一个节点,并把它的内容输出呢?
其实,在前面的学习中,大家已经了解到,每个节点都会定义一个next成员用于指向下一
个节点,所以,通过每个节点的next成员就可以找到链表中所有的节点了。
(2)
例子:
struct ST //定义了结构体ST
{
int Number; //编号,用于记录一个整型数
struct ST * next; //定义一个ST结构体的指针变量next,指向链表中下一个节点
};
void main()
{
struct ST * head; //定义了结构体ST的指针变量head作为第一个节点
int len = sizeof( struct ST );
head = ( struct ST * ) malloc( len ); //分配第1个节点的内存空间
head->Number = 1;
head->next = ( struct ST * ) malloc( len ); //分配第2个节点的内存空间
head->next->Number = 2;
head->next->next = ( struct ST * ) malloc( len );//分配第3个节点的内存空间
head->next->next->Number = 3;
//---------------------------------------------//
//以下代码是本次要学习与分析的代码//
//---------------------------------------------//
head->next->next->next = NULL; //第3个节点的next成员赋值为NULL,
代表第3个节点后没有其它节点了。
struct ST * p;//定义了结构体ST的指针变量p ,用于指向当前节点。
p = head; //让p指向链表中第一个节点head。
这里是将head的地址赋给了p。所以,p就指向了head。
do
{
printf("%d",p->Number);//输出p所指向的节点中,成员Number的值。
p = p -> next; //让p指向下一个节点。
}while( p!=NULL); //判断p是否等于NULL空值,如果相等则结束循环。
}
例子分析:
(1)例子中大部分的代码是使用了上一章“动态链表”学习中代码,包括动态生成第1,2,3个节点
并让它们形成链表的代码。
(2)我们的本次的分析从定义结构体指针变量p开始,该变量的作用是指向链表中当前的节点。
(3)首先,我们通过代码p=head,让p指向链表中第一个节点head。
(4)然后,我们进入到do...while循环中,首先通过printf函数,输出当前节点中的Number成员
中的值,而当前节点是第一个节点,所以,它的Number成员中的值为1。即输出1。
(5)然后,我们再执行p = p->next 这行代码,而p中的next成员是指向下一个节点,即第2个节点的
内存空间址,所以,将它赋给p,就等于将p指向第2个节点。
(6)然后,再判断p是否等于NULL,如果,等于NULL就结束循环,因为,后面没有节点了。
而在第3个节点中,它的next成员是被赋为NULL的。所以,当处理第3个节点时就会
结束循环。
小结:
(1)另外定义一个结构体指针变量p用于指向当前节点,就不用再使用head->next->next->next
这样的代码了。
(2)注意为链表中最后一个节点的next成员设置一个NULL,空值,代表链表结束。
(3)把链表中第1个节点赋值给p,就是让p指向了链表中第1个节点,
然后,通过p调用节点中的next成员,并将next成员所指向的内存空间地址赋给p,
就是将p指向下一个节点,这样,就可以找到链表中每一个节点了。
非常好,现在,我们已经掌握了C中的“输出节点内容”这个知识点,但是,如何去运行用它呢?所以,我们就要通过下方的按钮进入到游戏中,然后,运用该知识点去完成任务,这样,才可以加深大家对每个知识点的理解和运用,以及“尽快进入到编程的状态”。
不要停留在理论规则上面,快动起来吧!
(通过游戏模式学习与训练,需要在电脑上运行)