Adding third problem
This commit is contained in:
parent
517515774e
commit
e7c2309fce
1 changed files with 111 additions and 0 deletions
111
lab10/3.c
Normal file
111
lab10/3.c
Normal file
|
@ -0,0 +1,111 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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), 5), 3);
|
||||||
|
list list2 = insert(insert(insert(insert(NULL, 17), -3), 2), -8);
|
||||||
|
list list3 = insert(insert(insert(insert(NULL, 14), 21), 10), 32);
|
||||||
|
list lists[] = { list1, list2, list3 };
|
||||||
|
find_peak(lists, 3);
|
||||||
|
}
|
Loading…
Reference in a new issue