• Доброго времени суток. Мне нужна помощь. Пусть и прозвучит это странно, мне надо объяснить эту программу, то есть объяснить, как она работает:#include<stdio.h> #include<stdlib.h> struct list { int field; struct list * next; }; int ft_atoi(char *str) { int result = 0; int sign = 1; unsigned int i = 0; while(str[i] == ' ' || str[i] == '\n') { ++i; } while(str[i] == '-' || str[i] == '+') { if(str[i] == '-') { sign = sign * -1; } ++i; } while(str[i] >= '0' && str[i] <= '9') { result = result * 10 + str[i] - '0'; ++i; } return((int)(result*sign)); } void ft_push(struct list ** headRef, int value) { struct list * lst = (struct list*) malloc(sizeof(struct list)); lst->field = value; lst->next = *headRef; *headRef = lst; } void ft_push_end(struct list ** headRef, int value) { struct list * current = *headRef; if(current == NULL) { ft_push(headRef, value); } while(current->next != NULL) { current = current->next; } ft_push(&(current->next), value); } void ft_swap(struct list ** headRef, int numf, int nums) { struct list * lstf = *headRef; struct list * lsts = *headRef; while(lstf->field != numf && lstf->next != NULL) { lstf = lstf->next; } if(lstf->field == numf) { while(lsts->field != nums && lstf->next != NULL) { lsts = lsts->next; } if(lsts->field == nums) { int temp = lstf->field; lstf->field = lsts->field; lsts->field = temp; } } } void ft_insert(struct list ** headRef, struct list * lst, int value) { if(*headRef == NULL) { return; } else if((*headRef)->field == value) { while(lst) { ft_push(headRef, lst->field); lst = lst->next; } } else { struct list * headf = *headRef; struct list * heads = *headRef; struct list * lstf = lst; int i = 0; while(headf->field != value && headf->next != NULL) { ++i; headf = headf->next; } if (headf->field == value) { while(lstf->next) { lstf = lstf->next; } while(i != 1) { heads = heads->next; —i; } heads->next = lst; lstf->next = headf; headf = lstf; } } } void ft_pop_n(struct list ** headRef, int index) { if(*headRef == NULL) { return; } struct list * lst = *headRef; struct list * lprev = *headRef; int i = 0; while(lst && lst->field != index) { lst = lst->next; ++i; } while(i > 1) { lprev = lprev->next; —i; } if(lst->field == index && lprev->field != lst->field) { lprev->next = lst->next; lst->next = lprev; free(lst); } else if(lst->field == index && lst == lprev) { *headRef = (*headRef)->next; free(lst); } } void ft_print_list(struct list * head) { struct list * lst = head; while(lst) { printf("%d -> ", lst->field); lst = lst->next; } printf("NULL.\n"); } void ft_delete_list(struct list ** headRef) { struct list * prev = *headRef; while(prev) { *headRef = (*headRef)->next; printf("Deleting..\t[%d]\n", prev->field); free(prev); prev = *headRef; } printf("List was successfully deleted.\n"); } int main(int args, char *argv[]) { int arr_keys[args - 2]; struct list * head = NULL; for(int i = 0; i < args - 1; ++i) { arr_keys[i] = ft_atoi(argv[i + 1]); } for(int i = args - 2; i >= 0; —i) { ft_push(&head, arr_keys[i]); } ft_print_list(head); struct list * lst = NULL; ft_push(&lst, 99); ft_insert(&head, lst, 2); ft_print_list(head); ft_swap(&head, 12, 14); ft_print_list(head); ft_pop_n(&head, 2); ft_print_list(head); ft_delete_list(&head); return(0); }Задание было такое: односвязные списки. Функции: добавление элемента в начало, конец, в n-ую позицию. Очистка всего списка, очистка n-ого элемента в списке.Даю последние баллы! ​

Ответы 4

  • Здравствуйте!

    Эта программа реализует работу с односвязными списками и содержит функции для добавления элементов в начало и конец списка, добавления элемента в n-ую позицию, удаления элемента из списка, очистки всего списка и вывода списка на экран.

    Код начинается с объявления структуры list, которая представляет узел списка. Узел содержит поле с данными (целое число) и указатель на следующий узел списка.

    Затем идет функция ft_atoi, которая преобразует строку в целое число. Она используется в программе для преобразования аргументов командной строки в целые числа.

    Далее идут функции для добавления элементов в начало (ft_push) и конец (ft_push_end) списка. Функция ft_push создает новый узел списка, присваивает ему значение и указатель на текущий головной узел списка, а затем делает созданный узел новым головным узлом списка. Функция ft_push_end добавляет элемент в конец списка, перебирая все узлы до тех пор, пока не будет найден последний узел, после чего использует ft_push для добавления нового узла в конец списка.

    Функция ft_swap меняет местами значения двух элементов списка с заданными значениями. Она находит узел с первым значением и узел со вторым значением, и меняет их значения.

    Функция ft_insert добавляет элементы списка перед узлом с заданным значением. Если список пуст, функция ничего не делает. Если узел с заданным значением является головным узлом списка, функция использует ft_push для добавления новых элементов в начало списка. В противном случае функция находит узел с заданным значением и устанавливает указатели таким образом, чтобы добавить новый список перед этим узлом.

    Функция ft_pop_n удаляет узел со значением, соответствующим заданному значению. Если список пуст, функция ничего не делает. Если узел с заданным значением находится в середине списка, функция находит предыдущий узел и перенаправляет его указатель на следующий узел.

    Функция ft_print_list выводит содержимое списка на экран.

    Функция ft_delete_list удаляет все узлы списка и освобождает память, занятую ими.

    В main функции программы создается список из аргументов командной строки и выводится на экран с помощью ft_print_listДалее в коде определены несколько функций, которые реализуют необходимые операции со списком:

    ft_swap - меняет местами значения двух элементов в списке, которые содержат заданные значения.

    ft_insert - вставляет переданный список lst в список headRef после элемента со значением value.

    ft_pop_n - удаляет элемент списка с заданным значением index.

    Наконец, в функции main происходит создание списка из аргументов командной строки, демонстрация работы всех описанных выше функций и очистка списка.

    В целом, программа предоставляет пример работы с односвязным списком на языке программирования C и реализует несколько операций, которые можно выполнять со списками.

  • Эта программа реализует работу с односвязными списками и содержит функции для добавления элементов в начало и конец списка, добавления элемента в n-ую позицию, удаления элемента из списка, очистки всего списка и вывода списка на экран.

    Код начинается с объявления структуры list, которая представляет узел списка. Узел содержит поле с данными (целое число) и указатель на следующий узел списка.

    Затем идет функция ft_atoi, которая преобразует строку в целое число. Она используется в программе для преобразования аргументов командной строки в целые числа.

    Далее идут функции для добавления элементов в начало (ft_push) и конец (ft_push_end) списка. Функция ft_push создает новый узел списка, присваивает ему значение и указатель на текущий головной узел списка, а затем делает созданный узел новым головным узлом списка. Функция ft_push_end добавляет элемент в конец списка, перебирая все узлы до тех пор, пока не будет найден последний узел, после чего использует ft_push для добавления нового узла в конец списка.

    Функция ft_swap меняет местами значения двух элементов списка с заданными значениями. Она находит узел с первым значением и узел со вторым значением, и меняет их значения.

    Функция ft_insert добавляет элементы списка перед узлом с заданным значением. Если список пуст, функция ничего не делает. Если узел с заданным значением является головным узлом списка, функция использует ft_push для добавления новых элементов в начало списка. В противном случае функция находит узел с заданным значением и устанавливает указатели таким образом, чтобы добавить новый список перед этим узлом.

    Функция ft_pop_n удаляет узел со значением, соответствующим заданному значению. Если список пуст, функция ничего не делает. Если узел с заданным значением находится в середине списка, функция находит предыдущий узел и перенаправляет его указатель на следующий узел.

    Функция ft_print_list выводит содержимое списка на экран.

    Функция ft_delete_list удаляет все узлы списка и освобождает память, занятую ими.

    В main функции программы создается список из аргументов командной строки и выводится на экран с помощью ft_print_listДалее в коде определены несколько функций, которые реализуют необходимые операции со списком:

    ft_swap - меняет местами значения двух элементов в списке, которые содержат заданные значения.

    ft_insert - вставляет переданный список lst в список headRef после элемента со значением value.

    ft_pop_n - удаляет элемент списка с заданным значением index.

    Наконец, в функции main происходит создание списка из аргументов командной строки, демонстрация работы всех описанных выше функций и очистка списка.

    В целом, программа предоставляет пример работы с односвязным списком на языке программирования C и реализует несколько операций, которые можно выполнять со списками.

  • Здравствуйте!

    Эта программа реализует работу с односвязными списками и содержит функции для добавления элементов в начало и конец списка, добавления элемента в n-ую позицию, удаления элемента из списка, очистки всего списка и вывода списка на экран.

    Код начинается с объявления структуры list, которая представляет узел списка. Узел содержит поле с данными (целое число) и указатель на следующий узел списка.

    Затем идет функция ft_atoi, которая преобразует строку в целое число. Она используется в программе для преобразования аргументов командной строки в целые числа.

    Далее идут функции для добавления элементов в начало (ft_push) и конец (ft_push_end) списка. Функция ft_push создает новый узел списка, присваивает ему значение и указатель на текущий головной узел списка, а затем делает созданный узел новым головным узлом списка. Функция ft_push_end добавляет элемент в конец списка, перебирая все узлы до тех пор, пока не будет найден последний узел, после чего использует ft_push для добавления нового узла в конец списка.

    Функция ft_swap меняет местами значения двух элементов списка с заданными значениями. Она находит узел с первым значением и узел со вторым значением, и меняет их значения.

    Функция ft_insert добавляет элементы списка перед узлом с заданным значением. Если список пуст, функция ничего не делает. Если узел с заданным значением является головным узлом списка, функция использует ft_push для добавления новых элементов в начало списка. В противном случае функция находит узел с заданным значением и устанавливает указатели таким образом, чтобы добавить новый список перед этим узлом.

    Функция ft_pop_n удаляет узел со значением, соответствующим заданному значению. Если список пуст, функция ничего не делает. Если узел с заданным значением находится в середине списка, функция находит предыдущий узел и перенаправляет его указатель на следующий узел.

    Функция ft_print_list выводит содержимое списка на экран.

    Функция ft_delete_list удаляет все узлы списка и освобождает память, занятую ими.

    В main функции программы создается список из аргументов командной строки и выводится на экран с помощью ft_print_listДалее в коде определены несколько функций, которые реализуют необходимые операции со списком:

    ft_swap - меняет местами значения двух элементов в списке, которые содержат заданные значения.

    ft_insert - вставляет переданный список lst в список headRef после элемента со значением value.

    ft_pop_n - удаляет элемент списка с заданным значением index.

    Наконец, в функции main происходит создание списка из аргументов командной строки, демонстрация работы всех описанных выше функций и очистка списка.

    В целом, программа предоставляет пример работы с односвязным списком на языке программирования C и реализует несколько операций, которые можно выполнять со списками.

    • Автор:

      Tampon22
    • 1 год назад
    • 0
  • Здравствуйте!

    Эта программа реализует работу с односвязными списками и содержит функции для добавления элементов в начало и конец списка, добавления элемента в n-ую позицию, удаления элемента из списка, очистки всего списка и вывода списка на экран.

    Код начинается с объявления структуры list, которая представляет узел списка. Узел содержит поле с данными (целое число) и указатель на следующий узел списка.

    Затем идет функция ft_atoi, которая преобразует строку в целое число. Она используется в программе для преобразования аргументов командной строки в целые числа.

    Далее идут функции для добавления элементов в начало (ft_push) и конец (ft_push_end) списка. Функция ft_push создает новый узел списка, присваивает ему значение и указатель на текущий головной узел списка, а затем делает созданный узел новым головным узлом списка. Функция ft_push_end добавляет элемент в конец списка, перебирая все узлы до тех пор, пока не будет найден последний узел, после чего использует ft_push для добавления нового узла в конец списка.

    Функция ft_swap меняет местами значения двух элементов списка с заданными значениями. Она находит узел с первым значением и узел со вторым значением, и меняет их значения.

    Функция ft_insert добавляет элементы списка перед узлом с заданным значением. Если список пуст, функция ничего не делает. Если узел с заданным значением является головным узлом списка, функция использует ft_push для добавления новых элементов в начало списка. В противном случае функция находит узел с заданным значением и устанавливает указатели таким образом, чтобы добавить новый список перед этим узлом.

    Функция ft_pop_n удаляет узел со значением, соответствующим заданному значению. Если список пуст, функция ничего не делает. Если узел с заданным значением находится в середине списка, функция находит предыдущий узел и перенаправляет его указатель на следующий узел.

    Функция ft_print_list выводит содержимое списка на экран.

    Функция ft_delete_list удаляет все узлы списка и освобождает память, занятую ими.

    В main функции программы создается список из аргументов командной строки и выводится на экран с помощью ft_print_listДалее в коде определены несколько функций, которые реализуют необходимые операции со списком:

    ft_swap - меняет местами значения двух элементов в списке, которые содержат заданные значения.

    ft_insert - вставляет переданный список lst в список headRef после элемента со значением value.

    ft_pop_n - удаляет элемент списка с заданным значением index.

    Наконец, в функции main происходит создание списка из аргументов командной строки, демонстрация работы всех описанных выше функций и очистка списка.

    В целом, программа предоставляет пример работы с односвязным списком на языке программирования C и реализует несколько операций, которые можно выполнять со списками.

    • Автор:

      Dulpan2
    • 1 год назад
    • 0
  • Добавить свой ответ

Еще вопросы

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years