4 / 4 / 3
Регистрация: 27.11.2016
Сообщений: 59

Реализация односвязного списка

31.07.2017, 23:31. Показов 1468. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Программа падает, судя по тестам, после команды list_clear, которая очищает все ячейки.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
struct List * list_create () // ok
{
    struct List * L = (struct List*)malloc(sizeof(struct List));
    L -> head = NULL;
    return L;
}
void list_add_first (struct List * list, Data x) // ok
{
    struct Node * N = (struct Node *)malloc(sizeof(struct Node));
    N -> val = x;
    struct Node * buf = list -> head;
    list -> head = N;
    N -> next = buf;
}
void list_add_last (struct List * list, Data x) // ok
{
    struct Node * N = (struct Node *)malloc(sizeof(struct Node));
    N -> val = x;
    N -> next = NULL;
    struct Node * check = list -> head;
    if(check == NULL) {list -> head = N; return;}
    check = (list -> head) -> next;
    while(check -> next != NULL)
    {
        check = check -> next;
    }
    check -> next = N;
}
Data list_remove_first (struct List * list) //ok
{
    struct Node * buf = list -> head ->next;
    Data y = list -> head -> val;
    free(list -> head);
    list -> head = buf;
    return y;
}
Data list_remove_last (struct List * list) //ok
{
    struct Node * check, * buf;
    buf = list -> head;
    for(check = list -> head; check -> next; check = check -> next) {if(!(check -> next -> next)){buf = check;}}
    Data y = check -> val;
    free(check);
    buf -> next = NULL;
    return y;
}
Data list_get_first (struct List * list) // ok
{
    return (list -> head -> val);
}
Data list_get_last (struct List * list) // ok
{
    struct Node * check;
    for(check = list -> head; check -> next; check = check -> next) {}
    return (check -> val);
}
void list_print (struct List * list) // ok but empty
{
    if(list -> head == NULL) {printf ("Empty list\n");}
    struct Node * check = list -> head;
    Data x = list -> head -> val;
    printf("%d ", x);
    while(check != NULL)
    {
        check = check -> next;
        if(check != NULL)
        {
            x = check -> val;
            printf("%d ", x);
        }
    }
    printf("\n");
}
int list_size(struct List * list) // ok
{
    struct Node * check = list -> head;
    int size = 0;
    if(check == NULL) {return size;}
    while(check != NULL)
    {
        check = check -> next;
        ++size;
    }
    return size;
}
void list_clear(struct List * list) // mb
{
    struct Node * check = list -> head;
    if(check == NULL) {return;}
    struct Node * buf;
    buf = check;
    free(check);
    list -> head = NULL;
    while(buf)
    {
        check = buf;
        buf = buf -> next;
        free(check -> next);
    }
}
void list_destroy (struct List * list) // mb
{
    list_clear(list);
    free(list);
}
Добавлено через 14 минут
удалось подредактировать код, вроде тесты все мои выполняются, а система выдает ошибку:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
struct List * list_create () // ok
{
    struct List * L = (struct List*)malloc(sizeof(struct List));
    L -> head = NULL;
    return L;
}
void list_add_first (struct List * list, Data x) // ok
{
    struct Node * N = (struct Node *)malloc(sizeof(struct Node));
    N -> val = x;
    struct Node * buf = list -> head;
    list -> head = N;
    N -> next = buf;
}
void list_add_last (struct List * list, Data x) // ok
{
    struct Node * N = (struct Node *)malloc(sizeof(struct Node));
    N -> val = x;
    N -> next = NULL;
    struct Node * check = list -> head;
    if(check == NULL) {list -> head = N; return;}
    check = (list -> head) -> next;
    while(check -> next != NULL)
    {
        check = check -> next;
    }
    check -> next = N;
}
Data list_remove_first (struct List * list) //ok
{
    struct Node * buf = list -> head ->next;
    Data y = list -> head -> val;
    free(list -> head);
    list -> head = buf;
    return y;
}
Data list_remove_last (struct List * list) //ok
{
    struct Node * check, * buf;
    buf = list -> head;
    for(check = list -> head; check -> next; check = check -> next) {if(!(check -> next -> next)){buf = check;}}
    Data y = check -> val;
    free(check);
    buf -> next = NULL;
    return y;
}
Data list_get_first (struct List * list) // ok
{
    return (list -> head -> val);
}
Data list_get_last (struct List * list) // ok
{
    struct Node * check;
    for(check = list -> head; check -> next; check = check -> next) {}
    return (check -> val);
}
void list_print (struct List * list) // ok but empty
{
    if(list -> head == NULL) {printf ("Empty list"); return;}
    struct Node * check = list -> head;
    Data x = list -> head -> val;
    printf("%d ", x);
    while(check != NULL)
    {
        check = check -> next;
        if(check != NULL)
        {
            x = check -> val;
            printf("%d ", x);
        }
    }
    printf("\n");
}
int list_size(struct List * list) // ok
{
    struct Node * check = list -> head;
    int size = 0;
    if(check == NULL) {return size;}
    while(check != NULL)
    {
        check = check -> next;
        ++size;
    }
    return size;
}
void list_clear(struct List * list) // ok
{
    struct Node * check = list -> head;
    if(check == NULL) {return;}
    struct Node * buf;
    buf = check;
    list -> head = NULL;
    while(buf)
    {
        check = buf;
        buf = buf -> next;
        free(check);
    }
}
void list_destroy (struct List * list) // ok
{
    list_clear(list);
    free(list);
}
Вот это- результат работы теста системы.
Смущает фигня в конце:
5
72 5
72 5 19
size=3
x=72
5 19
x=19
5
x=5
22265952
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.07.2017, 23:31
Ответы с готовыми решениями:

Реализация стека на основе односвязного списка
typedef int Data; typedef struct Stack * pStack; pStack CreateStack(Data val); int Push(pStack This, Data val); void ...

Создание односвязного списка
Доброй ночи. Пытался сделать эти задания, но во время написания впервые столкнулся с неоднозначными проблемами. Не могу для указателя узла...

Сортировка односвязного списка
Всем доброго времени суток! Пишу курсавик по программированию, всё написал, осталась только одна функция уже голову всю сломал, никак не...

2
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
01.08.2017, 11:56
Цитата Сообщение от TheJazzMandono Посмотреть сообщение
система выдает ошибку
Какую?
Цитата Сообщение от TheJazzMandono Посмотреть сообщение
Вот это- результат работы теста системы.
Смущает фигня в конце:
Где код теста?
0
4 / 4 / 3
Регистрация: 27.11.2016
Сообщений: 59
01.08.2017, 12:17  [ТС]
Тест закрытый. Подозрение на list_clear и list_destroy. Хотя внешне, у меня все работает...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.08.2017, 12:17
Помогаю со студенческими работами здесь

Сортировка односвязного списка
Добрый день. Проблема, не знаю, с чем связана, сортирует нормально, все работает, но иногда программа вылетает, а в других функциях...

Удаление элемента из односвязного списка
помогите, пжлста, уже мучаюсь несколько дней, нужна незамысловатая функция,которая удаляет заданный элемент из односвязного списка ...

Удаление элемента из односвязного списка
Почему не работает функция удаления идентификатора? Как ее можно переделать? #include"stdafx.h" #include...

Вывод односвязного динамического списка
Размер структуры cell - 20 байт. (см. программу ниже). Т.е. при выделении памяти под новый элемент списка к каждому адресу будет...

Сортировка односвязного списка (пузырьком)
нужно отсортировать информацию о поездах по номеру поезда. Сортировку нужно сделать изменением узлов. При сортировке просто исчезает вторая...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

Новые блоги и статьи
Как использовать OAuth2 со Spring Security в Java
Javaican 14.05.2025
Протокол OAuth2 часто путают с механизмами аутентификации, хотя по сути это протокол авторизации. Представьте, что вместо передачи ключей от всего дома вашему другу, который пришёл полить цветы, вы. . .
Анализ текста на Python с NLTK и Spacy
AI_Generated 14.05.2025
NLTK, старожил в мире обработки естественного языка на Python, содержит богатейшую коллекцию алгоритмов и готовых моделей. Эта библиотека отлично подходит для образовательных целей и. . .
Реализация DI в PHP
Jason-Webb 13.05.2025
Когда я начинал писать свой первый крупный PHP-проект, моя архитектура напоминала запутаный клубок спагетти. Классы создавали другие классы внутри себя, зависимости жостко прописывались в коде, а о. . .
Обработка изображений в реальном времени на C# с OpenCV
stackOverflow 13.05.2025
Объединение библиотеки компьютерного зрения OpenCV с современным языком программирования C# создаёт симбиоз, который открывает доступ к впечатляющему набору возможностей. Ключевое преимущество этого. . .
POCO, ACE, Loki и другие продвинутые C++ библиотеки
NullReferenced 13.05.2025
В C++ разработки существует такое обилие библиотек, что порой кажется, будто ты заблудился в дремучем лесу. И среди этого многообразия POCO (Portable Components) – как маяк для тех, кто ищет. . .
Паттерны проектирования GoF на C#
UnmanagedCoder 13.05.2025
Вы наверняка сталкивались с ситуациями, когда код разрастается до неприличных размеров, а его поддержка становится настоящим испытанием. Именно в такие моменты на помощь приходят паттерны Gang of. . .
Создаем CLI приложение на Python с Prompt Toolkit
py-thonny 13.05.2025
Современные командные интерфейсы давно перестали быть черно-белыми текстовыми программами, которые многие помнят по старым операционным системам. CLI сегодня – это мощные, интуитивные и даже. . .
Конвейеры ETL с Apache Airflow и Python
AI_Generated 13.05.2025
ETL-конвейеры – это набор процессов, отвечающих за извлечение данных из различных источников (Extract), их преобразование в нужный формат (Transform) и загрузку в целевое хранилище (Load). . . .
Выполнение асинхронных задач в Python с asyncio
py-thonny 12.05.2025
Современный мир программирования похож на оживлённый мегаполис – тысячи процессов одновременно требуют внимания, ресурсов и времени. В этих джунглях операций возникают ситуации, когда программа. . .
Работа с gRPC сервисами на C#
UnmanagedCoder 12.05.2025
gRPC (Google Remote Procedure Call) — открытый высокопроизводительный RPC-фреймворк, изначально разработанный компанией Google. Он отличается от традиционых REST-сервисов как минимум тем, что. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru