【发布时间】:2016-07-03 22:46:54
【问题描述】:
我必须确定下面程序的输出。答案是B E A D C,但我不确定如何跟踪程序。这是我所知道的:
我们首先声明一个名为road_trip 的结构,其数据类型为trip。在主程序中,我们为成员place 赋值。然后创建一个链表,其中起始节点为s2,结束节点为s3。因为您可以看到起始节点的地址存储在一个单独的指针ptr 中,通常称为头指针。 s3 是链表的结尾,因为如果您看到s3,您可能会注意到s3 的next 是NULL。这意味着s3 没有引用任何其他节点。
我不明白的是程序如何打印存储在s2(B)、s5(E)、s1(A)、s4( D) 和 s3 (C) 的顺序。我确定这与我写 cmets 之后的两行有关。解释会很有帮助。
#include <stdio.h>
typedef struct road_trip
{
char place;
struct road_trip* next;
}trip;
int main (void)
{
trip s1, s2, s3, s4, s5, s6;
trip *ptr;
s1.place = 'A';
s2.place = 'B';
s3.place = 'C';
s4.place = 'D';
s5.place = 'E';
s5.next = &s1;
ptr = &s2;
s1.next = &s4;
s3.next = NULL;
s4.next = &s3;
s2.next = &s5;
while (ptr != NULL)
{
printf("%c ", ptr -> place); /*I don't get this line*/
ptr = ptr -> next; /*I don't get this line*/
}
return 0;
}
【问题讨论】:
-
我投票决定将此问题作为题外话结束,因为您可以简单地运行它并查看自己是否合适。
-
它被称为“链表”。 "next" of s3 is NULL - 这就是为什么
'C'是最后一个被打印的。 -
“你如何跟踪这样的程序” - 与任何其他程序相同。但是你必须先了解指针,而你显然没有。
-
'输出是什么'。你有没有尝试过任何非常简单的事情,比如运行程序?
标签: c linked-list structure