C语言链表处理:计算数据域之和

需积分: 1 0 下载量 4 浏览量 更新于2024-06-21 1 收藏 809KB DOC 举报
"这是一份关于C语言面试的填空题文档,主要针对求职者准备C语言面试时可能会遇到的问题。题目包含一个链表操作的函数,要求计算链表中所有节点数据域的和。" 在给定的程序中,有三个关键部分需要填写: 1. 在函数`fun(SLIST*h)`中,为了计算链表中所有节点的数据域之和,我们需要遍历链表。`p`是一个指向链表中的节点的指针,初始化为`h->next`,即链表的第一个有效节点(因为`h`是头结点,它的`next`指向第一个元素)。在`while`循环内,`s`累加`p`指向的节点的数据域,即`s+=p->data;`。因此,第一处填写为`data`。 2. 遍历链表后,我们需要移动`p`指针到下一个节点以便继续循环。这通过`p=p->next;`实现,所以第二处填写为`next`。 3. 在`main()`函数中,我们调用`fun()`函数来计算链表的和,并打印结果。`printf("\nsum=%d\n", fun(___3___));`这一行需要填写调用`fun()`的参数,即链表的头结点`head`,因此第三处填写为`head`。 整个程序的工作流程如下: - `creatlist(int a[])`函数用于创建链表,它接收一个整型数组`a`,并为每个数组元素创建一个链表节点,将它们链接起来。`h`和`p`用于初始化链表,`q`用于创建新节点。通过`malloc()`动态分配内存,并将`a[i]`的值存储在新节点的`data`字段,然后将`p`更新为新节点,`p->next`指向`q`,最后`p->next = NULL;`表示链表结束。 - `outlist(SLIST* head)`函数用于输出链表,但题目未提供具体实现,通常会遍历链表并打印每个节点的`data`。 - `main()`函数中,数组`a[]`初始化了要插入链表的值,然后调用`creatlist()`创建链表,`outlist()`输出链表,最后调用`fun(head)`计算链表的和并打印。 这个题目考察了C语言中的链表操作、指针的使用以及基本的算法设计能力。在面试或笔试中,理解和正确填写这些空白是至关重要的,以展示对C语言和数据结构的掌握程度。