Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
aleksandr_t94
0 / 0 / 1
Регистрация: 27.01.2013
Сообщений: 100
1

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

09.04.2013, 17:28. Просмотров 313. Ответов 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
Ответы с готовыми решениями:

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

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

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

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

Как создать двусвязный линейный список?
Люди добрые, помогите с лабораторной работой! Нужно выполнить следующее: 3) Двусвязный линейный...

7
Ternsip
664 / 192 / 29
Регистрация: 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 / 1
Регистрация: 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
664 / 192 / 29
Регистрация: 10.05.2012
Сообщений: 595
09.04.2013, 17:39 4
aleksandr_t94, потому что ты не создал объект. см пост ниже
0
Kuzia domovenok
2436 / 2143 / 523
Регистрация: 25.03.2012
Сообщений: 7,720
Записей в блоге: 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 / 1
Регистрация: 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
664 / 192 / 29
Регистрация: 10.05.2012
Сообщений: 595
09.04.2013, 17:44 7
aleksandr_t94, ненене, я снаркоманил, смотри ответ Кузи
1
aleksandr_t94
0 / 0 / 1
Регистрация: 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

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

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

Создать линейный однонаправленный список из целых чисел
Создать линейный однонаправленный список из целых чисел. Определить среднее арифметическое значений...


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

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

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