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

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

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

Добавление элемента в начало списка - C++

09.04.2013, 18:52. Просмотров 1033. Ответов 7
Метки нет (Все метки)

Проблема в том, что выводит 100, 9. Почему не выводит промежуточные значения - не понятно. Вроде бы не должен.
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
#include <stdio.h>
#include <stdlib.h>
 
struct Node
{
    int num;
    Node *next;
} *PNode,*First, *after_first;
 
int main()
{
    int i;
    PNode = (struct Node*)malloc(sizeof(Node));
    if(PNode==NULL) exit(1);
    after_first=PNode; //присвоил чтобы чтобы знать где начало списка
 
    for(i=0;i<10;i++)
    {
        PNode->num=i;
        if(i!=9)PNode->next=(struct Node*)malloc(sizeof(Node));
        else PNode->next=NULL;
    }
    //после цикла PNode->num==9(он самый последний)
 
    //это я хочу вставить в самое начало списка
    First=(struct Node*)malloc(sizeof(Node));
    if(First==NULL) exit(1);
 
    //присваиваю значение
    First->num=100;
    First->next=after_first; //присваиваю начало ссылке ссылку на начало списка и получается First должен стать первым.
 
    while(First!=NULL)
    {
        printf("%d\n", First->num);
        First=First->next;
    }
 
    return 1;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2013, 18:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Добавление элемента в начало списка (C++):

Добавление элемента в начало односвязного списка - C++
Здравствуйте, я не где не могу найти функцию по добавлению элемента в начало односвязного списка. Пожалуйста подскажите ее.

"Сортировка двусвязного списка путем исключения элемента с минимальным значением и включения его в начало нового списка - C++
Здравствуйте! Возникла проблема с программой. Тема: &quot;Сортировка двусвязного списка путем исключения элемента с минимальным значением и...

Добавление элемента в начало массива - C++
Есть два массива, например (1,2,3,4,5) и (0,0,5,5,5), нужно превратить их в (0,1,2,3,4,5) и в (0,0,0,5,5,5), не знаю как реализовать. ...

Добавление элемента в начало динамического массива - C++
Господа подскажите пожалуйста ошибку в коде. Не верно работает добавление нового элемента в начало динамического массива. Не могу допетрить...

Вставка элемента в начало односвязного списка - C++
Помогите вставить элемент в начало односвязного списка. Написана функция Insert, но она работает только для вставки в середину и конец...

Перенос в начало списка его максимального элемента, а в конец минимальный - C++
нужно написать функцию,которая переносит в начало непустого списка L его максимальный элемент а в конец минимальный.

7
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
09.04.2013, 19:11 #2
aleksandr_t94, давайте дам первый совет, делайте все с помощью функций, модульное программирование, слышали? я что-то не пойму, вы двусвязный список пытаетесь сделать?

Добавлено через 2 минуты
aleksandr_t94, вот вам нормальная функция добавления

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
template <typename T>
List *addToBack(List *Head, const T value)                  
{
    List *Ptr = new List;
    Ptr -> data = value;
 
    if(Head == NULL)
    {
        Head = Ptr;
        Ptr -> next = NULL;
    }
    else
    {
        List *temp = Head;
 
        while(temp -> next != NULL)
            temp = temp -> next;
                
            temp -> next = Ptr;
            Ptr -> next = NULL;
    }
 
    return Head;
}
Добавлено через 1 минуту
не посмотрел что вам нужно в начало добавлять, тогда вот

C++
1
2
3
4
5
6
7
8
9
10
11
template <typename T>
List *addToFront(List *Head, const T value)                 
{
    List *Ptr = new List;
    Ptr -> data = value;
 
    Ptr -> next = Head;
    Head = Ptr;
 
    return Head;
}
Добавлено через 8 минут
aleksandr_t94, а если по существу, то вот я подправил ваш вариант

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
#include <stdio.h>
#include <stdlib.h>
 
struct Node
{
    int num;
    Node *next;
}*Head;
 
int main()
{
    int i;
    Head = NULL;                    //голова списка
 
    for(i=0;i<10;i++)
    {
        if(Head == NULL){
            Head = (struct Node*)malloc(sizeof(Node));
            Head -> num = i;
            Head -> next = NULL;
        }
        else
        {
            Node *tmp = (struct Node*)malloc(sizeof(Node));
            tmp -> num = i;
            tmp -> next = Head;
            Head = tmp;
        }
    }
   
    Node *tmp_h = Head; 
    while(tmp_h != NULL)
    {
        printf("%d\n", tmp_h -> num);
        tmp_h = tmp_h -> next;
    }
 
    return 0;
}
1
aleksandr_t94
0 / 0 / 0
Регистрация: 27.01.2013
Сообщений: 100
09.04.2013, 20:24  [ТС] #3
Спасибо что переделали мой вариант, т.к. он более понятен для меня.
0
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
09.04.2013, 20:31 #4
aleksandr_t94, но вы все равно посмотрите как правильно надо делать.
0
aleksandr_t94
0 / 0 / 0
Регистрация: 27.01.2013
Сообщений: 100
09.04.2013, 22:46  [ТС] #5
Цитата Сообщение от yoghurt92 Посмотреть сообщение
aleksandr_t94, но вы все равно посмотрите как правильно надо делать.
Я бы с радостью, но с шаблонами и классами пока работать не научился.
0
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
09.04.2013, 22:58 #6
aleksandr_t94, так уберите шаблоны, и там не будет классов, просто функции
1
aleksandr_t94
0 / 0 / 0
Регистрация: 27.01.2013
Сообщений: 100
09.04.2013, 23:34  [ТС] #7
Цитата Сообщение от yoghurt92 Посмотреть сообщение
aleksandr_t94, так уберите шаблоны, и там не будет классов, просто функции
Хм... видимо следует почитать немного про шаблоны, а то как тёмный лес. Как увижу - сразу страшно =)
0
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
10.04.2013, 00:09 #8
aleksandr_t94, я тоже раньше так думал, все очень просто
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.04.2013, 00:09
Привет! Вот еще темы с ответами:

Реализовать функционал работы с одномерным динамическим массивом (добавление одного элемента в начало) - C++
Реализовать функционал работы с одномерным динамическим массивом. Возникла проблема с добавлением элемента. Буду признательна за...

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

Добавление элемента в середину списка - C++
на данный момент реализована функция добавления в конец списка void addToList (char data) { List *temp = new List; if (first ==...

Добавление элемента в конец списка - C++
Сначала добавляет первый элемент, а далее не хочет? Посмотрите свежим глазом, а то я лагаю! void List::bound(char data) {if (!Head) {...


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

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
10.04.2013, 00:09
Ответ Создать тему
Опции темы

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