【发布时间】:2022-01-09 04:02:58
【问题描述】:
我在下面重写了这段代码,在主函数中我调用了 push_front 函数,如下所示: push_front( &link[i], rollnumber, src, dst, gentime ); 我的问题是如何只显示链接[i],例如链接[1]?
int push_front( Node **head, int rollnumber, int src, int dst, double gentime )
{
Node *new_node = malloc( sizeof( Node ) );
int success = new_node != NULL;
if ( success )
{
new_node->rollnumber=rollnumber;
new_node->src = src;
new_node->dst=dst;
new_node->gentime=gentime;
new_node->next = *head;
*head = new_node;
}
return success;
}
void output( Node **head )
{
for( Node *current =*head; current != NULL; current = current->next )
{
//printf( "%d %d %d %0.1f ",current->rollnumber, current->src, current->dst, current->gentime );
printf("Roll Number:%2d\t",current->rollnumber);
printf("src:%2d\t", current->src);
printf("dest:%2d\t", current->dst);
printf("gentime:%0.1f\n", current->gentime);
}
printf( "%s\n", "NULL" );
}
void display( Node **set, size_t n )
{
for ( size_t i = 0; i <= n; i++ )
{
output( set++ );
putchar( '\n' );
}
}
显示所有列表时得到的输出如下:
Roll Number: 6 src: 1 dest:10 gentime:64.1
Roll Number: 5 src: 1 dest: 4 gentime:51.5
Roll Number: 4 src: 1 dest:17 gentime:38.0
Roll Number: 3 src: 1 dest:20 gentime:25.9
Roll Number: 2 src: 1 dest:15 gentime:13.9
Roll Number: 1 src: 1 dest: 3 gentime:1.6
NULL
Roll Number: 6 src: 2 dest:17 gentime:64.8
Roll Number: 5 src: 2 dest: 6 gentime:52.6
Roll Number: 4 src: 2 dest: 5 gentime:39.5
Roll Number: 3 src: 2 dest:20 gentime:26.0
Roll Number: 2 src: 2 dest:19 gentime:14.0
Roll Number: 1 src: 2 dest: 4 gentime:1.9
NULL
...等所有变量:src
list[i] 是基于变量:src。那么,我怎样才能只打印 src: 1 呢?
【问题讨论】:
-
由于列表的结构,每个节点都通过指针连接到下一个节点,(如果非循环,则从头到尾)因此它们的访问方式与数组不同(例如 struct.array 的数组)。 )。然后下一个节点将不会由
list[i]表示,而是由list = list->next表示。 -
@ryyker 不能只显示我已经拥有的功能的第一个链接吗?
-
不是这样。输出函数会出现
for( Node *current =*head; current != NULL; current = current->next )的问题。一方面,中心表达式应该检查current->next != NULL而不是current!= NULL。但是,当使用未初始化的指针值current->next进行赋值时,第三个表达式也会出错。如果只想打印头节点的成员,则将头指针作为参数传递给只接受节点指针的函数,并输出成员值 -
请参阅答案中的编辑,例如输出一个节点的成员的非常简单的方法。 (没有错误检查,如果计划使用,您应该添加。)
-
在一个评论中您使用了短语“第一个链接”,在另一个评论中您使用了“一个列表”。在您的原始帖子中使用了“列表 [i]”。 ('list[i]' 是数组表示法,在处理列表时通常不使用。)如果我没记错的话,它们似乎都暗示了同样的事情。 IE。您想要输出列表的一个节点。如果这是正确的,那么我帖子中的最新编辑显示了如何做到这一点。如果不是,请澄清您的问题。请记住,“列表”是称为“节点”的指针的集合。每个节点都指向所包含数据的一个实例以及另一个节点。