已知单链表的结点结构定义如下: typedef struct _NODE_ { int data; struct _NODE_ *next; } NODE; 说明:data 为数据域。next 为指针域,指示后继结点。 请编写函数,求带附加头结点的单链表全部数据元素的总和。 函数原型 int Sum(NODE *head); 说明:参数 head 为单链表的头指针。函数值为单链表全部数据元素的总和。 裁判程序 int main() { NODE *h; Create(&h); Input(h); printf("%d\n", Sum(h)); Destroy(&h); return 0; } 说明:Create 函数用于创建链表,Destroy 函数用于销毁链表。Input 函数用于输入链表:首先输入结点数,然后输入这些数据元素。 输入样例1 4 25 36 49 64 输出样例1 174 输入样例2 0 输出样例2 0
时间: 2024-03-21 22:39:24 浏览: 24
好的,以下是求带附加头结点的单链表全部数据元素的总和的函数代码,并附上 Create、Input 和 Destroy 函数的实现:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct _NODE_
{
int data;
struct _NODE_ *next;
} NODE;
void Create(NODE **head)
{
*head = (NODE *)malloc(sizeof(NODE));
(*head)->next = NULL;
}
void Input(NODE *head)
{
int n, x;
scanf("%d", &n);
NODE *p = head;
for (int i = 0; i < n; i++)
{
scanf("%d", &x);
NODE *q = (NODE *)malloc(sizeof(NODE));
q->data = x;
q->next = NULL;
p->next = q;
p = q;
}
}
void Destroy(NODE **head)
{
NODE *p = (*head)->next;
while (p != NULL)
{
NODE *q = p;
p = p->next;
free(q);
}
free(*head);
*head = NULL;
}
int Sum(NODE *head)
{
int sum = 0;
NODE *p = head->next;
while (p != NULL)
{
sum += p->data;
p = p->next;
}
return sum;
}
int main()
{
NODE *h;
Create(&h);
Input(h);
printf("%d\n", Sum(h));
Destroy(&h);
return 0;
}
```
函数的实现思路和之前给出的一样。Create 函数用于创建头结点并初始化,Input 函数用于输入链表,并在链表末尾添加新的结点,Destroy 函数用于销毁链表,并释放所有结点所占用的空间。
阅读全文