设带表头结点单链表的数据类型为整数,表头结点指针为head,编写算法统计链表中数据域值为正整数的结点个数占结点总数的比例,并返回该值,如果链表为空则返回-1。该算法的C 语言函数原型为: double Ratio(LinkList *head);
时间: 2024-09-23 08:06:08 浏览: 52
为了实现这个`Ratio`函数,你可以按照以下步骤来进行:
1. 首先,检查链表是否为空。如果`head`为`NULL`,表示链表为空,直接返回-1。
```c
if (head == NULL) {
return -1;
}
```
2. 初始化两个计数器,一个用于正整数结点(positive_count),另一个用于总结点数(total_count)。将`total_count`初始化为1,因为第一个节点一定存在,然后遍历链表。
```c
int positive_count = 1; // 结点1假设为正数
int total_count = 1;
LinkList *current = head;
while (current != NULL) {
// ...
}
```
3. 在遍历过程中,检查当前节点的值。如果是正整数,则`positive_count`加一;然后移动到下一个节点。
```c
if (current->data > 0) {
positive_count++;
}
current = current->next;
```
4. 当链表遍历完成后,计算比例并将其转换为浮点型,除以`total_count`。由于可能除以0的情况(如果链表只包含负数),需要再次检查`total_count`。
```c
if (total_count == 0) {
return -1;
} else {
double ratio = (double)positive_count / total_count;
return ratio;
}
```
5. 将整个函数组合起来:
```c
double Ratio(LinkList *head) {
if (head == NULL) {
return -1;
}
int positive_count = 1;
int total_count = 1;
LinkList *current = head;
while (current != NULL) {
if (current->data > 0) {
positive_count++;
}
current = current->next;
total_count++;
}
if (total_count == 0) {
return -1;
} else {
return (double)positive_count / total_count;
}
}
```
阅读全文