Реализовать однонаправленный список с барьерным элементом - C (СИ)
Формулировка задачи:
Нужно реализовать однонаправленный список с барьерным элементом.Один из пунктов задачи это написать функцию заполняющая список случайными n элементами.В данный момент у меня есть функция ,которая добавляет один элемент в конец .Один узел добавляется так как мне нужно,но вот следующие уже создаются поверх первого и совершенно не понимаю почему.
typedef struct node{ int data; struct node* next; }node; typedef struct node* list; node start={1,NULL}; list l=&start; void add_element(list l){ srand(time(NULL)); list temp=l; if(!temp->next==NULL) { temp=temp->next; } while(temp->next!=NULL) temp=temp->next; node n={rand()%5+1,NULL}; temp->next=&n; }
Решение задачи: «Реализовать однонаправленный список с барьерным элементом»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <time.h> typedef struct Node { int data; struct Node* next; } Node; //----------------------------------------------------------------------------- void add(Node** list, int value) { Node* node = malloc(sizeof(Node)); node->data = value; node->next = NULL; for (; *list; list = &((*list)->next)) { ; } *list = node; } //----------------------------------------------------------------------------- Node* make(unsigned cnt, int min, int max) { Node* list = NULL; srand(time(NULL)); while (cnt--) { add(&list, rand() % (max - min) + min); } return list; } //----------------------------------------------------------------------------- void print(const Node* list) { for (; list; list = list->next) { printf("%d ", list->data); } printf("\n"); } //----------------------------------------------------------------------------- int main() { Node* list = make(10, 1, 100); print(list); return 0; }
Объяснение кода листинга программы
В данном коде реализована программа, которая создает однонаправленный список с барьерным элементом.
- Синтаксический анализ:
- Используется язык программирования C.
- Препроцессорные директивы: #include
, #include , #include используются для ввода-вывода данных и управления памятью. - typedef struct Node { объявляет структуру данных для представления узла списка. Каждый узел содержит целочисленное значение и указатель на следующий узел.
- void add(Node list, int value)** - добавляет новый узел в начало списка.
- *Node make(unsigned cnt, int min, int max) - создает список из cnt случайных целых чисел в диапазоне от min до max**.
- *void print(const Node list)** - выводит на экран значения узлов списка.
- int main() - является точкой входа в программу. Создает список и выводит его на экран.
- Алгоритм работы программы:
- Создается структура данных для узла списка.
- Создается функция add, которая добавляет новый узел в начало списка.
- Создается функция make, которая создает список из заданного количества случайных целых чисел.
- Создается функция print, которая выводит значения узлов списка на экран.
- В функции main создается список из 10 случайных целых чисел от 1 до 100.
- Значения списка выводятся на экран.
- Вывод:
- При запуске программы будет выведен список из 10 случайных целых чисел от 1 до 100. Каждое число будет отделено пробелом.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д