带头结点的单链表A,头指针为h,设计算法getListLen( ),统计单链表中的数据元素个数,并返回链表中的数据元素的最大值和最小值。在主函数里输出数据元素个数及最小值、最大值;如果单链表为空,需提示用户。:
时间: 2024-03-24 14:37:41 浏览: 51
带头结点的单链表
4星 · 用户满意度95%
好的,以下是针对您的需求,使用C语言编写的算法代码:
```
#include <stdio.h>
#include <stdlib.h>
// 链表结点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 获取链表长度、最大值和最小值
void getListLen(Node* h, int* length, int* max, int* min) {
if (h == NULL || h->next == NULL) {
// 链表为空
*length = 0;
*max = *min = 0;
return;
}
Node* p = h->next;
*length = 0;
*max = *min = p->data;
while (p != NULL) {
*length += 1;
if (p->data > *max) {
*max = p->data;
}
if (p->data < *min) {
*min = p->data;
}
p = p->next;
}
}
int main() {
// 创建带头结点的单链表
Node* h = (Node*)malloc(sizeof(Node));
h->next = NULL;
// 向链表中添加数据元素
Node* p = h;
for (int i = 1; i <= 10; i++) {
Node* node = (Node*)malloc(sizeof(Node));
node->data = i;
node->next = NULL;
p->next = node;
p = node;
}
// 获取链表长度、最大值和最小值
int length, max, min;
getListLen(h, &length, &max, &min);
// 输出结果
if (length == 0) {
printf("链表为空!\n");
} else {
printf("链表中的数据元素个数为:%d\n", length);
printf("链表中的最大值为:%d,最小值为:%d\n", max, min);
}
return 0;
}
```
这段代码实现了一个带头结点的单链表,并且通过 `getListLen()` 函数统计了单链表中的数据元素个数、最大值和最小值,最后在主函数里输出了这些结果。需要注意的是,如果链表为空,需要显示提示信息。
阅读全文