
programmirovanie / ОПиАЯ_№3_12_спис_пример
.docL_t_1.c
#include <stdio.h>
#include <alloc.h>
#define node struct nd
/* структура узла */
node {
int data; /* данные */
node * next;
/* указатель на след. элемент */
};
/* функция добавления элемента в конец списка */
void add_item(node ** list, int data){
node * n = NULL; /* новый элемент */
node * h = *list; /* голова списка */
/* выделяем память */
n =(node *) malloc(sizeof(node));
/* заполняем новый элемент */
n->data = data;
n->next = NULL;
if (h == NULL){ /* если пустой список */
*list = n; /* изменяем голову */
}
else{
/* проходим до конца */
while (h->next != NULL)
{h = h->next;}
/* дописываем в конец */
h->next = n;
}
}
/* функция удаления элементов списка */
void kill_list(node ** list){
node * h = *list; /* голова списка */
/* проходим по списку */
while (h != NULL)
{
node * p = h; /* удаляемый элемент */
h = h->next;
/* удаляем элемент */
free(p);
}
list = NULL;
}
/* функция вывода списка на экран */
void print_list(node * list){
node * h = list; /* голова списка */
if (h == NULL){ /* если список пуст */
printf("пуст\n");
return;
}
/* проход по спику */
while (h != NULL){
/* вывод элемента */
printf("%d ", h->data);
h = h->next;
}
printf("\n");
}
/* функция поиска максимального элемента */
int find_max_item(node * list){
node * h = list; /* голова списка */
int max = -32768;
/* максимальный элемент иницализируем очень маленьким числом */
/* проход по спику */
while (h != NULL){
if (h->data > max)
{ /* если число больше максимума */
/* заменяем максимум */
max = h->data;
}
h = h->next;
} /* while */
/* возвращаем максимум */
return max;
}
/* считать с консоли (экран + клавиатура) */
/*возвращает адрес &new_list */
node * read_list_from_console(){
node * new_list = NULL; /* новый список */
int k = 0;
printf("Введите количество элементов
в списке : ");
/* считываем количество элементов */
scanf("%d", &k);
while (k){ /* пока k не станет 0 */
int data;
printf("Введите элемент : ");
scanf("%d", &data);
/* добавляем введенные элементы */
add_item(&new_list, data);
/* уменьшить k */
k--;
}
printf("Введеный список : ");
/* выводим список */
print_list(new_list);
/* возвращаем список */
return new_list;
}
int main(){
/* создаем список считанный с консоли */
node * list = read_list_from_console();
/* находим максимальный элемент */
int max = find_max_item(list);
/* открываем файл для записи */
FILE * file = fopen("result.max", "w");
if (file == NULL) { /* если файл не открылся */
return -1; /* выйти */
}
/* запись максимума в файл */
fprintf(file, "%d\n", max);
/* закрыть файл */
fclose(file);
/* вывести максимальный элемент */
printf("Максимальный элемент = %d\n", max);
/* удалить список */
kill_list(&list);
return 0;
}