Сформировать связный список (стек), содержащий последовательность целых чисел - C (СИ)
Формулировка задачи:
Сформировать связный список (стек), содержащий последовательность целых чисел, вводимых из файла. Удалить из списка все нули.
Язык С.
Спасибо!
Решение задачи: «Сформировать связный список (стек), содержащий последовательность целых чисел»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <time.h> typedef struct node_t { int value; struct node_t* next; } TNode; //----------------------------------------------------------------------------- TNode* Push(TNode** stack, int value) { TNode* node = malloc(sizeof(TNode)); node->value = value; node->next = *stack; *stack = node; return *stack; } //----------------------------------------------------------------------------- void Print(const TNode* stack) { for (; stack; stack = stack->next) { printf("%d, ", stack->value); } printf("\b\b \n"); } //----------------------------------------------------------------------------- TNode* GetStack(FILE* f) { TNode* stack = NULL; int digit; while (fscanf(f, "%d", &digit) == 1) { Push(&stack, digit); } return stack; } //----------------------------------------------------------------------------- TNode* RemoveValue(TNode** stack, int value) { TNode** node = stack; TNode* tmp; while (*node) { if ((*node)->value == value) { tmp = *node; *node = (*node)->next; free(tmp); } else { node = &(*node)->next; } } return *stack; } //----------------------------------------------------------------------------- int main(int argc, char* argv[]) { FILE* f = stdin; if (argc > 1) { f = fopen(argv[1], "r"); if (f == NULL) { f = stdin; perror(argv[1]); } } TNode* stack = GetStack(f); Print(stack); RemoveValue(&stack, 0); Print(stack); return 0; }
Объяснение кода листинга программы
В данном коде реализованы основные операции со связным списком (стеком) в языке C: создание нового элемента списка (Push), вывод элементов списка (Print), чтение значений из файла и добавление их в список (GetStack), а также удаление элемента из списка по значению (RemoveValue). Код начинается с объявления структуры узла списка TNode, которая содержит значение и указатель на следующий элемент списка. Далее определены функции:
- Push - создает новый узел списка, инициализирует его значение и добавляет его в начало списка.
- Print - проходит по всем элементам списка и выводит их значения через запятую.
- GetStack - считывает значения из файла и добавляет их в список.
- RemoveValue - проходит по всем элементам списка и удаляет первый элемент со значением равным указанному. В функции main создается связный список и выводится на экран. Затем список изменяется путем удаления первого элемента и снова выводится на экран. Если в командной строке указан аргумент, то список считывается из файла, иначе список пуст.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д