Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Соколиный глаз
C#
229 / 170 / 115
Регистрация: 25.07.2014
Сообщений: 3,506
Завершенные тесты: 2
1

Связные списки

26.06.2018, 19:47. Просмотров 837. Ответов 6
Метки нет (Все метки)

Почему вылетает ошибка:
exit status 1
main.c:10:1: error: expected ';', identifier or '(' before 'struct'
struct Node *NewNode(int value, Node *next) // TODO
^~~~~~
main.c:10:33: error: unknown type name 'Node'
struct Node *NewNode(int value, Node *next) // TODO
тут:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <malloc.h>
 
struct Node
{
    int Value;
    struct Node *Next;
}
 
struct Node *NewNode(int value, Node *next) // TODO
{
    struct Node *node = (Node*)malloc(sizeof(Node));
    node*.Value = value;
    node*.Next = next;
    return node;
}
 
int main(void) {
  printf("Hello World\n");
  return 0;
}
?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.06.2018, 19:47
Ответы с готовыми решениями:

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

Связные списки: исправить ошибку в коде
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;locale.h&gt; struct...

Структуры и связные списки. Нарушение прав доступа при записи
исполняемый файл запускаеться , а когда начинаю вводить данные с клавиатуры...

Связные списки (?) Отсортировать карточки с названиями мест по первой букве
Есть студенты, есть большое количество карточек, на каторых написаны названия...

Списки в Си
Двусвязный список содержит в качестве информационного поля одно данное типа...

6
SlavaSokolov
170 / 134 / 105
Регистрация: 14.04.2016
Сообщений: 735
26.06.2018, 19:53 2
C
1
2
3
4
struct Test
{
 
};
1
Ovederax
198 / 137 / 95
Регистрация: 30.04.2017
Сообщений: 292
26.06.2018, 20:07 3
Лучший ответ Сообщение было отмечено Volobuev Ilya как решение

Решение

По второй ошибке:
Нужно использовать повсюду struct Node либо использовать typedef

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
#include <stdio.h>
#include <malloc.h>
 
typedef struct _Node
{
    int val;
    struct _Node *next;
} Node;
 
struct Node *NewNode(int value, Node *next) // TODO
{
    Node *node = (Node*)malloc(sizeof(Node));
    node->val = value; //(*node).val = value;
    node->next = next;
    return node;
}
 
int main(void)
{
 
  Node *b = NewNode(77,NULL);
  Node *c = NewNode(88,b);
  printf("%d",c->next->val);
  return 0;
}
1
Соколиный глаз
C#
229 / 170 / 115
Регистрация: 25.07.2014
Сообщений: 3,506
Завершенные тесты: 2
26.06.2018, 20:13  [ТС] 4
main.c: In function 'NewNode':
main.c:15:12: warning: return from incompatible pointer type [-Wincompatible-pointer-types]
return node;
^~~~
main.c: In function 'main':
main.c:21:13: warning: initialization from incompatible pointer type [-Wincompatible-pointer-types]
Node *b = NewNode(77, NULL);
^~~~~~~
main.c:22:13: warning: initialization from incompatible pointer type [-Wincompatible-pointer-types]
Node *c = NewNode(88, b);
^~~~~~~
Вывелось при:
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
#include <stdio.h>
#include <malloc.h>
 
typedef struct HelperNode
{
    int val;
    struct HelperNode *next;
} Node;
 
struct Node *NewNode(int value, Node *next)
{
    Node *node = (Node*)malloc(sizeof(Node));
    node->val = value;
    node->next = next;
    return node;
}
 
int main(void)
{
  Node *b = NewNode(77, NULL);
  Node *c = NewNode(88, b);
  printf("%d", c->next->val);
  return 0;
}
0
Ovederax
198 / 137 / 95
Регистрация: 30.04.2017
Сообщений: 292
26.06.2018, 20:16 5
Лучший ответ Сообщение было отмечено Volobuev Ilya как решение

Решение

10 строка:
Node *NewNode(int value, Node *next)
1
Соколиный глаз
C#
229 / 170 / 115
Регистрация: 25.07.2014
Сообщений: 3,506
Завершенные тесты: 2
27.06.2018, 14:05  [ТС] 6
Не работает следующий участок кода:
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
#include <stdio.h>
#include <malloc.h>
 
typedef struct HelperNode
{
    int val;
    struct HelperNode *next;
} Node;
 
Node *NewNode(int value, Node *next)
{
    Node *node = (Node*)malloc(sizeof(Node));
    node->val = value;
    node->next = next;
    return node;
}
 
Node *NewNode(int value) // Если убрать эту функцию, то все хорошо.
{
    return NewNode(value, NULL);
}
 
int main(void)
{
    Node *b = NewNode(77, NULL);
    Node *c = NewNode(88, b);
    printf("%d", c->next->val);
    return 0;
}
0
Ovederax
198 / 137 / 95
Регистрация: 30.04.2017
Сообщений: 292
28.06.2018, 07:52 7
Лучший ответ Сообщение было отмечено Volobuev Ilya как решение

Решение

Volobuev Ilya,
В языке си нет перегрузки функций.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
...
Node * NewNode2(int value)
{
    return NewNode(value, NULL);
}
 
int main(void)
{
    Node *b = NewNode2(77);
    Node *c = NewNode(88, b);
    printf("%d", c->next->val);
    return 0;
}
1
28.06.2018, 07:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.06.2018, 07:52

Двунаправленные списки
есть готовые функции для работы с двунаправленными списками нужно решить...

Двунаправленные списки
есть готовые функции для работы с двунаправленными списками нужно решить...

Списки, считывание
Добрый вечер! Подскажите пожалуйста, как можно считать список в цикле? спасибо...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru