@XRFD

Значение типа нельзя использовать для, инициализации сущности типа linked_list?

хотел сделать двусвязный список, в чём проблема как решить
#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

struct node
{
    int value;
    struct node* next;
    struct node* prev;
};

struct linked_list
{
    size_t size;
    struct node* tail;
    struct node* head;
};

static struct linked_list* linked_list_new(void)
{
    struct linked_list* list = malloc(sizeof * list);
    list->size = 0;
    list->head = NULL;
    list->tail = NULL;
    return list;
}

static  void linked_list_add(struct linked_list* list,
    int value)
{
    struct node* new_node = malloc(sizeof * new_node);
    struct node* list_tail = list->tail;

    new_node->prev = list_tail;
    new_node->next = NULL;
    new_node->value = value;

    if (list_tail) {
        list_tail->next = new_node;
    }
    else {
        list->head = new_node;
    }

    list->tail = new_node;
    list->size++;
}

static void linked_list_free(struct linked_list* list)
{
    struct node* node = list->head;

    if (list->size > 0) {
        while (node->next) {
            node = node->next;
            free(node->prev);
        }

        free(node);
    }

    free(list);
}

static int min_element(const struct linked_list* list)
{
    int min;
    struct node* tmp = list->head;

    if (list->size < 0) {
        return -1;
    }
    else {
        min = tmp->value;
    }

    while (tmp->next) {
        tmp = tmp->next;

        if (tmp->value < min) {
            min = tmp->value;
        }
    }

    return min;
}

int main(void)
{
    struct linked_list* list = linked_list_new();
    struct node* tmp;
    size_t count;

    srand(time(NULL));

    printf("Number of elements: ");
    scanf_s("%u", &count);

    while (count--) {
        linked_list_add(list, rand() % 100 - 50);
    }

    tmp = list->head;

    while (tmp) {
        printf("%d ", tmp->value);
        tmp = tmp->next;
    }

    printf("\nMin. element: %d\n", min_element(list));

    linked_list_free(list);
    return 0;
}
  • Вопрос задан
  • 92 просмотра
Решения вопроса 1
by_kapt0xa
@by_kapt0xa
Учу кресты катаюсь на велике
!!! посмотри конец сообщения

маллок возращает void*, нужно явно преобразовать в linked_list*
я бы написал (linked_list*)..., но то ли умные, то ли занудные дяди говорят что надо писать static_cast<linked_list*>(...)
struct linked_list* list =               malloc(sizeof * list); // подчеркивает красным
struct linked_list* list = (linked_list*)malloc(sizeof * list); //не подчеркивает красным


у меня на сегодня исчерпан лимит на ответы, я отвечу ререз редактирование сообщения:
https://www.youtube.com/watch?v=1i4nVpIQN0U

если использовать не malloc и free, а new и delete, то тип данных будет не void*, а сразу нужный.
но new и delete это c++.
вы скорее всего используете C для заданий в универе, но если вам разрешают пользоваться C++, я бы рекомендовал его, там более приятный синтаксис, хотя мне по началу не было понятно как работает cout, но когда я разобрался, я перешел на сторону c++.
извиняюсь что быканул за C, я сам новичок на форуме, не уверен что C вынесен в отдельную категорию, просто у вас указан с++
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы