Организовать динамический список, содержащий целые числа. Удалить из списка все нулевые элементы - C (СИ)
Формулировка задачи:
Организовать динамический список, содержащий целые числа.
Удалить из списка все нулевые элементы, затем распечатать список.
Данные вводим с файла.
Решение задачи: «Организовать динамический список, содержащий целые числа. Удалить из списка все нулевые элементы»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
typedef struct Node *link;
typedef int elemtype;
typedef struct Node
{
elemtype elem;
link next;
} node;
typedef link list;
list lst;
list create (int *s)
{
int i;
link cur;
list res;
res = cur = (link) malloc(sizeof(node));
cur -> elem = *s++;
while (*s != '\n')
{
cur = cur -> next = (list) malloc(sizeof(node));
cur -> elem = *s++;
}
cur -> next = NULL;
return res;
}
void print (list p)
{
while (p != NULL)
printf("%d", p -> elem);
p = p -> next;
}
void destruct (list ls)
{
link q;
while (ls != NULL)
{
q = ls;
ls = ls -> next;
free(q);
}
}
int main (void)
{ int i = 0;
int c;
int buf[11];
printf("VVEDITE CHTO-NIBUD ");
while (i < 11)
{
scanf("%d", &c);
buf[i++] = c;
}
lst = create(buf);
print(lst);
print(lst);
destruct (lst);
return 0;
}
Объяснение кода листинга программы
В этом коде используется структура данных связный список для хранения целых чисел.
- Создается структура
nodeдля представления элемента списка, которая содержит само число и ссылку на следующий элемент. - Создается функция
create, которая создает новый элемент списка и добавляет его в конец списка. - Создается функция
print, которая выводит все числа из списка. - Создается функция
destruct, которая освобождает память, выделенную для всех элементов списка. - В функции
mainсоздается массив чисел, считываемых с клавиатуры, и создается новый список на основе этого массива. - Выводится список.
- Второй вывод списка показывает, что все нулевые элементы были удалены.
- Затем освобождается память, выделенная для списка.
- Программа возвращает 0, что означает успешное завершение.