已知f为单链表的表头指针, 链表中存储的都是整型数据,试写出实现下列运算的非递归算法: ① 求链表中的最大整数; ② 求链表的结点个数; ③ 求所有整数的平均值。
时间: 2024-05-01 08:16:30 浏览: 90
好的,我明白了。以下是回答:
① 求链表中的最大整数:
算法思路:
1. 取表头元素作为最大值;
2. 从表头的下一个元素开始向后遍历整个链表,若出现比最大值大的元素,则更新最大值;
3. 遍历至链表尾部,最大值即为链表中的最大整数。
算法实现:
```
int getMax(Node* f) {
int maxNum = f->data;
Node* p = f->next;
while (p != NULL) {
if (p->data > maxNum) {
maxNum = p->data;
}
p = p->next;
}
return maxNum;
}
```
② 求链表的结点个数:
算法思路:
1. 初始化结点个数为0;
2. 从表头开始向后遍历整个链表,每遍历到一个结点,将结点个数加1;
3. 遍历至链表尾部,返回结点个数。
算法实现:
```
int getCount(Node* f) {
int count = 0;
Node* p = f;
while (p != NULL) {
count++;
p = p->next;
}
return count;
}
```
③ 求所有整数的平均值:
算法思路:
1. 初始化整数总和为0,结点个数为0;
2. 从表头开始向后遍历整个链表,每遍历到一个结点,将结点中存储的整数值累加到整数总和中,将结点个数加1;
3. 遍历至链表尾部,整数总和除以结点个数即为所有整数的平均值。
算法实现:
```
float getAverage(Node* f) {
int sum = 0, count = 0;
Node* p = f;
while (p != NULL) {
sum += p->data;
count++;
p = p->next;
}
return (float)sum/count;
}
```
阅读全文