Заполнение списка данными - 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;
}

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы:
    • #include для работы с функциями ввода-вывода
    • #include для работы с функцией malloc и cfree
    • #include для работы со строками (необходимо для функции scanf)
  2. Определяем пользовательские типы данных:
    • typedef struct List - создаем тип данных для представления узла списка
    • typedef struct Mylist - создаем тип данных для представления списка
  3. Создаем функцию инициализации списка:
    • *Mylist InitMylist( void )** - возвращает указатель на голову списка
  4. Добавляем элемент в список:
    • *void AddLast_Mylist(Mylist u, int a)** - добавляет элемент в конец списка
  5. Удаляем элемент из списка:
    • *void Delete_Mylist(Mylist u)** - удаляет все элементы списка
  6. Печатаем список:
    • *void Print_Mylist(Mylist u)** - печатает все элементы списка
  7. В функции main() создаем экземпляр списка:
    • *Mylist sp=InitMylist();**
  8. Запрашиваем у пользователя данные и добавляем их в список:
    • for(int i=1; i<=N; ++i)
    • printf(Vvedite chisla v spisok:);
    • scanf(%d, &d);
    • AddLast_Mylist(sp, d);
  9. Печатаем список и удаляем его:
    • Print_Mylist(sp);
    • Delete_Mylist(sp);
  10. Не забываем освободить память:
    • free(sp);
  11. Возвращаем 0, чтобы указать, что программа успешно завершилась:
    • return 0;

Оцени полезность:

6   голосов , оценка 4 из 5
Похожие ответы