Форум программистов, компьютерный форум CyberForum.ru

Линейный список не получается создать - C++

Восстановить пароль Регистрация
 
aleksandr_t94
0 / 0 / 0
Регистрация: 27.01.2013
Сообщений: 100
09.04.2013, 17:28     Линейный список не получается создать #1
Подчёркивает PNode->num=i;, а почему - хз. Какой раз пытаюсь разобраться в данной теме, но не получается. Скажите что делаю не так.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <stdlib.h>
 
typedef struct Node
{
    int num;
    Node *next;
} *PNode;
 
int main()
{
    int i=1;
    PNode head = NULL;
    PNode->num=i;
    printf("%d\n",PNode->num);
 
 
    return 1;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2013, 17:28     Линейный список не получается создать
Посмотрите здесь:

C++ создать однопоточный линейный список
C++ [C++] Линейный список
C++ Создать линейный двунаправленный список, упрорядоченный по убыванию
Создать линейный список целых чисел. Вычислить количество вхождений заданного числа в очереди C++
C++ Односвязный линейный список (Описать тип данных, который отвечает такому представлению многочленов, и создать логическую функцию)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
09.04.2013, 17:34     Линейный список не получается создать #2
aleksandr_t94,
C++
1
2
3
PNode head = NULL;
    head->num=i;
    printf("%d\n",head->num);
aleksandr_t94
0 / 0 / 0
Регистрация: 27.01.2013
Сообщений: 100
09.04.2013, 17:35  [ТС]     Линейный список не получается создать #3
Цитата Сообщение от Ternsip Посмотреть сообщение
aleksandr_t94,
C++
1
2
3
PNode head = NULL;
    head->num=i;
    printf("%d\n",head->num);
Программа ничего не выводит и такое чувство зависает.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <stdlib.h>
 
typedef struct Node
{
    int num;
    Node *next;
} *PNode;
 
int main()
{
    int i=1;
    PNode head = NULL;
    head->num=i;
    printf("%d\n",head->num);
 
 
    return 1;
}
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
09.04.2013, 17:39     Линейный список не получается создать #4
aleksandr_t94, потому что ты не создал объект. см пост ниже
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
09.04.2013, 17:41     Линейный список не получается создать #5
ты пытаешься записать по адресу NULL какую-то структуру с полем, равным i. Это неверно.
Память под структуру надо выделять.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <stdlib.h>
 
typedef struct Node
{
    int num;
    Node *next;
} *PNode;
 
int main()
{
    int i=1;
    PNode head = new Node;//выделяем память под новый Node
    head->num=i;
    printf("%d\n",head->num);
    delete head;
 
    return 0;
}
aleksandr_t94
0 / 0 / 0
Регистрация: 27.01.2013
Сообщений: 100
09.04.2013, 17:42  [ТС]     Линейный список не получается создать #6
Цитата Сообщение от Ternsip Посмотреть сообщение
aleksandr_t94, потому что head всегда null, а его потомки уже имеют значение
C++
1
2
3
4
PNode t, head = NULL;
t->next = head;
t->num = i;
printf("%d\n",head->num);
Как я понимаю, PNode - это указатель на нашу структуру типа Node, head - это наш *next; Ему мы присвоили значение NULL, но ведь num мы ничего не присваивали. Моё рассуждение верно или нет? Поправьте если не прав.
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
09.04.2013, 17:44     Линейный список не получается создать #7
aleksandr_t94, ненене, я снаркоманил, смотри ответ Кузи
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2013, 18:08     Линейный список не получается создать
Еще ссылки по теме:

Линейный список C++
Создать список целых чисел. Создать новый список, записав в него отрицательные элементы C++

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

Или воспользуйтесь поиском по форуму:
aleksandr_t94
0 / 0 / 0
Регистрация: 27.01.2013
Сообщений: 100
09.04.2013, 18:08  [ТС]     Линейный список не получается создать #8
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
ты пытаешься записать по адресу NULL какую-то структуру с полем, равным i. Это неверно.
Память под структуру надо выделять.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <stdlib.h>
 
typedef struct Node
{
    int num;
    Node *next;
} *PNode;
 
int main()
{
    int i=1;
    PNode head = new Node;//выделяем память под новый Node
    head->num=i;
    printf("%d\n",head->num);
    delete head;
 
    return 0;
}
Переделал под язык си немного. В целом понятно теперь, но одна мелочь всё же в голове не укладывается:"typedef struct Node" - это название нашей структуру, грубо говоря тип. *PNode - это переменная данной структуру, которая... я запутался зачем она нужна. Просто PNode head у меня ассоциируется со следующим: PNode - моя структура, а head указатель на следующую. Объясните вот этот момент пожалуйста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <stdlib.h>
 
typedef struct Node
{
    int num;
    Node *next;
} *PNode;
 
int main()
{
    int i=1;
    PNode head = (struct Node*)malloc(sizeof(Node));
    head->num=i;
    printf("%d\n",head->num);
    free(head);
 
    return 1;
}
Добавлено через 19 минут
Всё разобрался. Всё было из-за этого typedef. Я не понимал зачем его вообще пишут. Теперь понял, это для удобства обращения.
Yandex
Объявления
09.04.2013, 18:08     Линейный список не получается создать
Ответ Создать тему
Опции темы

Текущее время: 15:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru