каждый раз, когда я использую функцию добавления, просто происходит сбой
Ваша проблема в функции pu sh, где значение узла не изменяется после его инициализации в NULL, поэтому в
if ( result == SUCCESS) {
List->size++;
if (empty)
List->tail = List->head;
}
тест всегда ложен и связанный код не выполняется
Вам просто нужно чтобы изменить две строки, замените строку
add_front(&(List->head), value,key);
на
node = add_front(&(List->head), value,key);
и строку
insert_value(insert_node, value,key);
by
node = insert_value(insert_node, value,key);
Если я сделаю эти два изменения и добавлю к твоему коду определения
#include <stdlib.h>
#include <stdio.h>
typedef int value_type;
typedef int Key_type;
#define SUCCESS 1
#define FAILURE 0
и добавлю следующее main :
int main()
{
Sorted_List list = { 0, 0, 0, 0, 0 };
Node * node;
append(&list, 2, 22);
append(&list, 3, 33);
append(&list, 1, 11);
for (node = list.head; node != NULL; node = node->sort)
printf("[key=%d, value=%d] ", node->key, node->value);
putchar('\n');
return 0;
}
исполнение пишет:
[key=22, value=2] [key=33, value=3] [key=11, value=1]
Из этого в Sorted_List ваш код изменения голова и хвост но не head_sort или tail_sort но в Node вы устанавливаете sort , но не next , это не логично, более того, узлы не отсортированы