Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
aleksandr_t94
0 / 0 / 0
Регистрация: 27.01.2013
Сообщений: 100
#1

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

09.04.2013, 17:28. Просмотров 290. Ответов 7
Метки нет (Все метки)

Подчёркивает 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2013, 17:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Линейный список не получается создать (C++):

Вставить в линейный список перед элементом с заданным значением другой линейный список - C++
Как можно вставить в линейный список перед элементом с заданным значением другой линейный список? Как один элемент вставлять, я знаю, а вот...

Задали односвязный линейный список с целыми числами. Создать новый список, который содержит элементы заданного списка в обратном порядке - C++
Задали односвязный линейный список с целыми числами. Создать новый список, который содержит элементы заданного списка в обратном порядке.

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

Создать линейный односвязный (двухсвязный) список - C++
Помогите пожалуйста решить задачу: Создать линейный односвязный (двухсвязный) список. Из списка удалить последнюю пару соседних...

Создать линейный односвязный и двухсвязный список - C++
Нужна помощь,задание: Создать линейный односвязный список.Из списка удалить элемент стоящий перед минимальным элементом, затем элементы...

Создать линейный двунаправленный список, упрорядоченный по убыванию - C++
Создать линейный двунаправленный список, упрорядоченный по убыванию.

7
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);
0
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;
}
0
Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
09.04.2013, 17:39 #4
aleksandr_t94, потому что ты не создал объект. см пост ниже
0
Kuzia domovenok
2031 / 1875 / 169
Регистрация: 25.03.2012
Сообщений: 6,456
Записей в блоге: 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;
}
1
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 мы ничего не присваивали. Моё рассуждение верно или нет? Поправьте если не прав.
0
Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
09.04.2013, 17:44 #7
aleksandr_t94, ненене, я снаркоманил, смотри ответ Кузи
1
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. Я не понимал зачем его вообще пишут. Теперь понял, это для удобства обращения.
0
09.04.2013, 18:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2013, 18:08
Привет! Вот еще темы с ответами:

Создать однопоточный линейный список и сортировать методом пузырька - C++
создать однопоточный линейный список и сортировать методом пузырька , желательно с пояснением

Создать односвязный линейный список, элементами которого являются случайные натуральные числа - C++
Создать односвязный линейный список, элементами которого являются случайные натуральные числа. Напечатать значения элементов, расположенных...

Создать линейный список целых чисел. Вычислить количество вхождений заданного числа в очереди - C++
Создать линейный список целых чисел. Вычислить количество вхождений заданного числа в очереди

Односвязный линейный список (Описать тип данных, который отвечает такому представлению многочленов, и создать логическую функцию) - C++
Многочлен P(x)=anxn+an-1xn-1+...+a1x+a0 можно представить в виде списка . Если аi=0, то соответствующая запись не заносится в список....


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

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

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