在数据结构中用C语言设计一个算法能够在一次遍历玩单链表后找出其中最大和最小的接点
以下是一种用C语言实现的算法,可以在一次遍历单链表后找出其中最大和最小的节点:
#include <stdio.h>
#include <stdlib.h>
// 定义单链表节点的结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建单链表
Node* createList(int* arr, int n) {
Node *head, *p;
head = (Node*)malloc(sizeof(Node));
head->next = NULL;
p = head;
for (int i = 0; i < n; i++) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = arr[i];
newNode->next = NULL;
p->next = newNode;
p = p->next;
}
return head;
}
// 查找最大和最小节点
void findMaxMin(Node* head, int* max, int* min) {
Node* p = head->next;
*max = *min = p->data; // 初始化最大和最小值
while (p != NULL) {
if (p->data > *max) {
*max = p->data;
}
if (p->data < *min) {
*min = p->data;
}
p = p->next;
}
}
int main() {
int arr[] = {5, 3, 8, 2, 9, 1, 4, 7, 6};
int n = sizeof(arr) / sizeof(int);
Node* head = createList(arr, n);
int max, min;
findMaxMin(head, &max, &min);
printf("max: %d\n", max);
printf("min: %d\n", min);
return 0;
}
该算法的时间复杂度为O(n),其中n为单链表的长度。算法的思路是先将最大和最小值初始化为第一个节点的数据,然后依次遍历单链表中的每个节点,如果发现某个节点的数据比当前的最大值还要大,就更新最大值;如果发现某个节点的数据比当前的最小值还要小,就更新最小值。最后输出最大和最小值即可
原文地址: https://www.cveoy.top/t/topic/e9As 著作权归作者所有。请勿转载和采集!