#include #include /* * Linked List */ typedef struct int_list_t * list; struct int_list_t { int el; list next; }; list insert(list lst, int el); list delete(list lst, int el); list tail(list lst); int head(list lst); void print_list(list lst); list insert(list lst, int el) { list * adr = &lst; while ( (*adr) != NULL ) { adr = &(*adr)->next; } list temp = malloc(sizeof(struct int_list_t)); temp->el = el; temp->next = (*adr); (*adr) = temp; return lst; } list delete(list lst, int el) { list * adr = &lst; while ( (*adr) != NULL ) { if ((*adr)->el == el) { list temp = (*adr)->next; free(*adr); (*adr) = temp; break; } adr = &(*adr)->next; } return lst; } int head(list lst) { return lst->el; } list tail(list lst) { return lst->next; } void print_list(list lst) { while ( lst != NULL ) { printf("%d ", head(lst)); lst = tail(lst); } printf("\n"); } /* * Finding peak valuez */ int find_min(list lst) { int min = head(lst); lst = tail(lst); while (lst) { if ( head(lst) < min ) { min = head(lst); } lst = tail(lst); } return min; } int find_max(list lst) { int max = head(lst); lst = tail(lst); while (lst) { if ( head(lst) > max ) { max = head(lst); } lst = tail(lst); } return max; } void find_peak(list * lst, size_t size) { int min = find_min(lst[0]); int max = find_max(lst[0]); int new_min, new_max; for (int i = 1; i < size; i++) { new_min = find_min(lst[i]); new_max = find_max(lst[i]); if (new_min < min) { min = new_min; } if (new_max > max) { max = new_max; } } printf("Maximum %d\n", max); printf("Minimum %d\n", min); } int main(void) { list list1 = insert(insert(insert(insert(NULL, 11), -7), 05), 03); list list2 = insert(insert(insert(insert(NULL, 17), -3), 02), -8); list list3 = insert(insert(insert(insert(NULL, 14), 21), 10), 32); list lists[] = { list1, list2, list3 }; find_peak(lists, 3); }