用C语言编写一个程序,要求如下:已知f为单链表的表头指针,链表中存储的都 是整型数据,试写出实现下列运算的递归算法:①求链表中的最大整数; ②求链表的结点个数; ③求所有整数的平均值。
时间: 2024-11-09 13:18:13 浏览: 37
在C语言中,你可以使用递归来实现对单链表的操作。这里是一个简单的示例代码,包含了三种递归函数,分别用于求最大值、节点数以及平均值:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表结构体
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
// 递归函数:求链表的最大值
int findMax(ListNode* head) {
// 基本情况:如果链表为空,返回0
if (head == NULL)
return INT_MIN;
else if (head->next == NULL) // 如果只有一个元素,即当前就是最大值
return head->val;
// 递归情况:遍历剩余部分寻找最大值
else
return max(head->val, findMax(head->next)); // 使用max函数比较并返回较大者
}
// 辅助函数:计算两个整数的最大值
int max(int a, int b) {
return a > b ? a : b;
}
// 递归函数:求链表的节点个数
size_t countNodes(ListNode* head) {
// 基本情况:如果链表为空,返回0
if (head == NULL)
return 0;
// 递归情况:对于非空链表,加1然后继续递归到下一个节点
else
return 1 + countNodes(head->next);
}
// 递归函数:求链表的平均值(假设链表非空)
double average(ListNode* head) {
// 基本情况:如果链表只有1个元素,直接返回该元素值除以1
if (countNodes(head) == 1)
return (double)head->val;
else { // 递归情况:累加所有元素值,除以总节点数
double sum = head->val;
size_t count = 1;
ListNode* temp = head->next;
while (temp != NULL) {
sum += temp->val;
count++;
temp = temp->next;
}
return sum / count;
}
}
int main() {
// 初始化链表并设置数据... (这部分需要你自己提供实际操作)
// 调用上述函数并打印结果
printf("最大值: %d\n", findMax(head));
printf("节点个数: %zu\n", countNodes(head));
printf("平均值: %.2lf\n", average(head));
return 0;
}
```
在这个例子中,你需要自己实现初始化链表和添加元素的部分,并处理可能出现的特殊情况。在`main`函数中,将链表的头指针传递给这三段递归函数即可。
阅读全文