Заполнение списка данными - C (СИ)
Формулировка задачи:
Помогите пожалуйста, нужен кусок кода который будет заполнять список данными на языке Си
Решение задачи: «Заполнение списка данными»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#define N 5
typedef struct List
{
int data;
struct List *next;
} List;
typedef struct Mylist
{
List *root, *carr;
} Mylist;
Mylist *InitMylist( void )
{
Mylist *u=(Mylist*)malloc(sizeof(Mylist));
u->root = (List*)malloc(sizeof(List));
u->carr = u->root;
if(u->root==NULL)return NULL;
u->root->next=NULL;
return u;
}
void AddLast_Mylist(Mylist *u, int a)
{
u->carr->data=a;
u->carr->next=(List*)malloc(sizeof(List));
u->carr=u->carr->next;
u->carr->next=NULL;
}
void Delete_Mylist(Mylist* u)
{
List* uk;
while(u->root!=NULL)
{
uk=u->root;
u->root=u->root->next;
free(uk);
}
free(u);
}
void Print_Mylist(Mylist * u)
{
List* uk=u->root;
while(uk->next!=NULL)
{
printf("%d\n", uk->data);
uk=uk->next;
}
}
int main(void)
{
Mylist *sp=InitMylist();
int d;
char x;
for(int i=1; i<=N; ++i)
{
printf("Vvedite chisla v spisok: ");
scanf("%d", &d);
AddLast_Mylist(sp, d);
printf("Prodolzhit? y/n: ");
while(getchar()!='\n');
scanf("%c", &x);
if(x=='n')break;
}
Print_Mylist(sp);
Delete_Mylist(sp);
sp=NULL;
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы:
- #include
для работы с функциями ввода-вывода - #include
для работы с функцией malloc и cfree - #include
для работы со строками (необходимо для функции scanf)
- #include
- Определяем пользовательские типы данных:
- typedef struct List - создаем тип данных для представления узла списка
- typedef struct Mylist - создаем тип данных для представления списка
- Создаем функцию инициализации списка:
- *Mylist InitMylist( void )** - возвращает указатель на голову списка
- Добавляем элемент в список:
- *void AddLast_Mylist(Mylist u, int a)** - добавляет элемент в конец списка
- Удаляем элемент из списка:
- *void Delete_Mylist(Mylist u)** - удаляет все элементы списка
- Печатаем список:
- *void Print_Mylist(Mylist u)** - печатает все элементы списка
- В функции main() создаем экземпляр списка:
- *Mylist sp=InitMylist();**
- Запрашиваем у пользователя данные и добавляем их в список:
- for(int i=1; i<=N; ++i)
- printf(
Vvedite chisla v spisok:); - scanf(
%d, &d); - AddLast_Mylist(sp, d);
- Печатаем список и удаляем его:
- Print_Mylist(sp);
- Delete_Mylist(sp);
- Не забываем освободить память:
- free(sp);
- Возвращаем 0, чтобы указать, что программа успешно завершилась:
- return 0;