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

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

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

  1. Синтаксический анализ:
    • Используется язык программирования 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() - является точкой входа в программу. Создает список и выводит его на экран.
  2. Алгоритм работы программы:
    • Создается структура данных для узла списка.
    • Создается функция add, которая добавляет новый узел в начало списка.
    • Создается функция make, которая создает список из заданного количества случайных целых чисел.
    • Создается функция print, которая выводит значения узлов списка на экран.
    • В функции main создается список из 10 случайных целых чисел от 1 до 100.
    • Значения списка выводятся на экран.
  3. Вывод:
    • При запуске программы будет выведен список из 10 случайных целых чисел от 1 до 100. Каждое число будет отделено пробелом.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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