Реализовать однонаправленный список с барьерным элементом - 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. Каждое число будет отделено пробелом.