Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
 Аватар для __bool
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744

Связанный лист

18.03.2011, 10:46. Показов 1733. Ответов 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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
using namespace std;
 
class Node
{
public:
        Node(){}
        ~Node(){}
        Node *Next;
        void SetValue(value){itsValue = value;}
        int GetValue()const {return itsValue;}
protected:
        int itsValue;
};
 
void ListGen(Node *temp, int i);
void ListOut(Node *temp);
 
int main()
{
        Node *First = new Node;
        
        ListGen(First,10);
        ListOut(First);
        getchar();
        return 0;
}
 
void ListGen(Node *temp, int i)
{
        if (i!=0)
        {
        temp->SetValue(i);
        temp->Next=new Node;
        temp=temp->Next;
        --i;
        ListGen(temp,i);
        }
        temp->Next=NULL;
}
 
void ListOut(Node *temp)
{
        if (temp!=NULL)
        {
        cout << temp->GetValue() << endl;
        temp = temp->Next;
        ListOut(temp);
        }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.03.2011, 10:46
Ответы с готовыми решениями:

Связанный список.
Компилятор ругается на строку 169 In member function `virtual Node* HeadNode::Insert(Data*)': 169 argument of type...

Связанный список
ребят,нужна помощь. короче дело в том,что нужно &quot;то есть тебе нужно поменять местами ссылки друг на друга.. то есть когда ты считываешь...

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

6
 Аватар для Dexter
291 / 151 / 34
Регистрация: 13.10.2009
Сообщений: 164
18.03.2011, 11:16
C++
1
2
3
4
5
6
7
8
9
10
11
12
void ListGen(Node *temp, int i)
{
    if (i!=0)
    {
        temp->SetValue(i);
        temp->Next=new Node;
        temp=temp->Next;
        --i;
        ListGen(temp,i);
    }
    else temp->Next=NULL;
}
Иначе, без else, у вас набор несвязанных узлов. Дальше думаю разберетесь (там в 0 элементе получите неинициализированную переменную)
1
 Аватар для __bool
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
18.03.2011, 12:10  [ТС]
Отлично.. благодарю за помощь.. поправил вывод и все норм..
Только не пойму почему не работало..

Ведь каждый раз условие выполнялось if (i!=0) кроме последнего раза..странно...
0
 Аватар для Dexter
291 / 151 / 34
Регистрация: 13.10.2009
Сообщений: 164
18.03.2011, 13:04
Объясню почему не работало:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void ListGen(Node *temp, int i)
{
        if (i!=0)
        {
                temp->SetValue(i);//присвоили значение
                temp->Next=new Node;//создали новый под-узел
                temp=temp->Next;//приняли значение под-узла
                --i;
                ListGen(temp,i);//делаем все тоже самое для под-узла
        }
        temp->Next=NULL;//а тут под-узел нашего под-узла становится NULL(ведь выполняется всегда),
                  //то есть остался главный узел и его под-узел, а дальше ссылка на NULL,
                 //потому на экран должно было выводить только 2 значения
}
1
 Аватар для __bool
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
18.03.2011, 13:10  [ТС]
Извиняюсь, но все равно не пойму.. индекс "i" ведь 10 раз не равен нулю, значит постоянно доходя до строчки ListGen(temp,i) все происходит с самого начала функции.. как же на 3 раз происходит выход из рекурсии?
0
 Аватар для Dexter
291 / 151 / 34
Регистрация: 13.10.2009
Сообщений: 164
18.03.2011, 13:36
Выход не происходит, я же с самого начала написал:
Иначе, без else, у вас набор несвязанных узлов.
Попытаюсь на примере показать:

Добавил вывод, чтобы было понятнее:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void ListGen(Node *temp, int i)
{
    if (i!=0)
    {
        temp->SetValue(i);
        temp->Next=new Node;
        cout<<"Node: "<<temp<<" Node->Next:"<<temp->Next<<" Value:"<<temp->GetValue()<<endl;
        temp=temp->Next;
        --i;
        ListGen(temp,i);
    }
    temp->Next=NULL;//Выполняется уже после того, как рекурсия завершилась
    cout<<"On exit Node: "<<temp<<" Node->Next:"<<temp->Next<<" Value:"<<temp->GetValue()<<endl;
}
Результат:
Node: 004D1418 Node->Next:004D1450 Value:10
Node: 004D1450 Node->Next:004D7E28 Value:9
Node: 004D7E28 Node->Next:004D7E60 Value:8
Node: 004D7E60 Node->Next:004D7E98 Value:7
Node: 004D7E98 Node->Next:004D7ED0 Value:6
Node: 004D7ED0 Node->Next:004D7F08 Value:5
Node: 004D7F08 Node->Next:004D7F58 Value:4
Node: 004D7F58 Node->Next:004D7F90 Value:3
Node: 004D7F90 Node->Next:004D7FC8 Value:2
Node: 004D7FC8 Node->Next:004D8000 Value:1
On exit Node: 004D8000 Node->Next:00000000 Value:-842150451
On exit Node: 004D8000 Node->Next:00000000 Value:-842150451
On exit Node: 004D7FC8 Node->Next:00000000 Value:1
On exit Node: 004D7F90 Node->Next:00000000 Value:2
On exit Node: 004D7F58 Node->Next:00000000 Value:3
On exit Node: 004D7F08 Node->Next:00000000 Value:4
On exit Node: 004D7ED0 Node->Next:00000000 Value:5
On exit Node: 004D7E98 Node->Next:00000000 Value:6
On exit Node: 004D7E60 Node->Next:00000000 Value:7
On exit Node: 004D7E28 Node->Next:00000000 Value:8
On exit Node: 004D1450 Node->Next:00000000 Value:9
10
9
Как мы видим в результате - все узлы создаются (рекурсивно все подряд), но, при выходе с функции, а это после того как рекурсия отработает, то для каждого узла Node->Next становится нулем, также видно что на выходе у нас не обнуляется только первый элемент (значение 10), почему я писал выше. В результате у вас остается first и ссылка на его узел, а вот у его узла уже ссылка на 0. А остальные остаются, просто вы с ними не связаны никак.

Блок схему лень рисовать, но если надо, можно попробовать))
1
 Аватар для __bool
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
18.03.2011, 14:06  [ТС]
Спасибо огромное!! С рекурсией редко работаю, не учел, что когда функция вызывает саму себя, то потом, после выполнения всех итераций, она как бы обратно приходит к остальной своей части..
А я отнесся к рекурсии как к простому циклу...
Спасибо еще раз!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.03.2011, 14:06
Помогаю со студенческими работами здесь

Связанный список
Не могу обратиться к методу класса Node хотя они выраженны как public: void addNode(int d); void printList(); #include&lt;iostream&gt;...

Связанный список
Всем доброго время суток, написать программу демонстрации связанного списка, где PART - (ДЕТАЛЬ) содержит номер детали и остальную...

Циклический связанный список
Доброго времени суток. Пытаюсь посчитать количество значений в циклическом списке. Но всегда получается на 1 значение меньше. Или я должен...

И снова связанный список
Есть кусок связанного списка, только начал его делать, в тырнете много примеров как он реализован на структурах, в одних случаях структура...

Связанный список (очередь)
Здравствуйте, пытался создать связанный список (элементы выводятся в том же порядке, как и добавляются). Получилось только с двумя...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru