用C++写 在dev-c++上可执行的程序,已知一组整数1.2.3.4放在带头结点的单链表中,设计算法,求结点值小于结点平均值的结点个数,并通过函数值返回结果
时间: 2023-03-23 07:01:49 浏览: 94
好的,根据您的要求,我将回答您的问题。这是一个计算链表节点值小于平均值的节点个数的问题。我们可以用以下的算法:
1. 定义一个计数器count和一个指向头结点的指针p。
2. 遍历链表,计算链表节点的总和sum和链表节点的个数n。
3. 计算链表节点的平均值avg=sum/n。
4. 重置p为头结点指针。
5. 遍历链表,如果节点值小于平均值avg,则count加1。
6. 返回count作为函数值。
以下是C语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int val;
struct node *next;
} Node;
int count_smaller_than_avg(Node *head) {
if (head == NULL || head->next == NULL) {
return 0;
}
int count = 0;
int sum = 0;
int n = 0;
Node *p = head->next;
while (p != NULL) {
sum += p->val;
n++;
p = p->next;
}
float avg = (float) sum / n;
p = head->next;
while (p != NULL) {
if (p->val < avg) {
count++;
}
p = p->next;
}
return count;
}
int main() {
// 创建带头结点的单链表
Node *head = (Node *) malloc(sizeof(Node));
head->next = NULL;
Node *tail = head;
int nums[] = {1, 2, 3, 4};
int n = sizeof(nums) / sizeof(nums[0]);
// 将整数1.2.3.4放入链表中
for (int i = 0; i < n; i++) {
Node *node = (Node *) malloc(sizeof(Node));
node->val = nums[i];
node->next = NULL;
tail->next = node;
tail = node;
}
int count = count_smaller_than_avg(head);
printf("节点值小于平均值的节点个数为:%d\n", count);
return 0;
}
```
注意,这段代码假设链表中不包含头结点的值。如果链表中包含头结点的值,则需要在计算平均值时将头结点的值排除在外。
阅读全文