已知f为单链表的表头指针, 链表中存储的都是整型数据,试写出实现下列运算的非递归算法: ① 求链表中的最大整数; ② 求链表的结点个数; ③ 求所有整数的平均值。
时间: 2024-05-24 12:09:58 浏览: 106
已知head为单链表的表头指针,链表中存储的都是整形数据,实现下列运算的递归算法
4星 · 用户满意度95%
好的,让我来回答您的问题。
① 求链表中的最大整数的非递归算法:遍历链表,通过比较每个节点中的整数大小,找到链表中的最大值即可。
代码示例:
int max = f->val;
Node* current = f;
while(current != NULL){
if(current->val > max){
max = current->val;
}
current = current->next;
}
return max;
其中,f为链表头指针,val为节点中存储的整数值,next为指向下一节点的指针。
② 求链表的结点个数的非递归算法:遍历链表,依次计数每个节点即可。
代码示例:
int count = 0;
Node* current = f;
while(current != NULL){
count++;
current = current->next;
}
return count;
其中,count为计数器变量,初始值为0。
③ 求所有整数的平均值的非递归算法:遍历链表,累加每个节点中的整数值,最后除以节点个数即可得到平均值。
代码示例:
double sum = 0;
int count = 0;
Node* current = f;
while(current != NULL){
sum += current->val;
count++;
current = current->next;
}
return sum / count;
其中,sum为累加器变量,初始值为0。由于计算平均值可能出现小数,因此返回值类型为double。
阅读全文