Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
1

Реализовать обход списка фруктов

27.03.2015, 09:14. Показов 1300. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите с обходом списка. Обьясняю есть список допустим
банан
апельсин
папайя
магазин id=2
манго
магазин id=1
яблоко
груша
Теперь необходимо там где в списке встретилось слово магазин по его id перейти на магазин с нужным id(причем в самом магазине может быть ссылка на другой магазин).
тоесть есть списки
магазин id=1
вишня
киви
банан
магазин id=2
.........................
магазин id=2
яблоко
вишня
банан
Ну и так далее, в конце концов необходимо сформировать список всех фруктов, тоесть после того как считали все ссылки на магазин, возвращатся на шаг выше и дочитывать список с позиции когда нашли ссылку на магазин и считывать далее
и в результате должен получится список
банан
апельсин
папайя
яблоко
вишня
банан
манго
вишня
киви
банан
яблоко
вишня
банан
яблоко
груша
Вот так где-то плюс на каждом вложении счетчик вложенности подсчитывать
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.03.2015, 09:14
Ответы с готовыми решениями:

Реализовать ведение списка забронированных и списка купленных билетов в кинозале кинотеатра
Приветствую! работаю на Builder Borland c++ - программирую таблицы и кнопки такое задание :...

Бинарное древо (реализовать структуру и обход веток с выводом на экран) - C++
Есть код: обход бинарного дерева 3 разными способа с авто заполнением чисел #include <iostream>...

Структура: Создать ведомость витаминного состава фруктов на единицу массы...
Создать ведомость витаминного состава фруктов на единицу массы.Пользователь указывает витамин на...

Вывести те названия фруктов, которые имеют наибольшее количество заданной буквы
Задание: Создать шаблон вектора и считать в него список названия фруктов.:yes: Вывести те названия...

8
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
27.03.2015, 09:18 2
вам бы преподавателем работать
0
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
27.03.2015, 10:33  [ТС] 3
Я смог только проходить по каждому вложению и считывать, а вот чтобы вернуться на шаг выше и считать далее, для меня большая загвоздка,я не понимаю как

Добавлено через 42 минуты
Нда вижу никто не поможет

Добавлено через 16 минут
Ок в принципе можно запоминать в вектор все id, благо они уникальные и неповторяющиеся, затем после считывания самого нижнего списка без ссылок, просто вернуть ту же функцию но с id на предыдущем шаге, но тогда он начнет считывать список сначала, надо как-то запоминать еще и номер в списке чтобы начинать не сначала.
id строка не число, поэтому уникальные
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
27.03.2015, 10:40 4
я помогу - просто объясни задание нормально
0
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
27.03.2015, 10:56  [ТС] 5
Так я в 1 посте все написал вроде
есть список фруктов, в нем может быть вложенный список фруктов ссылающийся на магазин с его адресом(их может быть несколько), во вложенном магазине может быть еще один вложенный список фруктов, ну или ссылок на другие магазины, надо обходить все вложенности до тех пор пока не считаем все списки со всех вложенностей(учитывая на каждом шаге счетчик вложенности). В результате получить список простой без вложенностей. Я и пример привел в 1 посте что там неясно

Добавлено через 7 минут
Вот с 1 поста смотри
список у нас
банан
апельсин
папайя
далее вложенность видиш смотрим его адрес id=2
идем туда смотрим там список увеличивая счетчик вложения
яблоко
вишня
банан
благо тут нет вложенности возвращаемся на список предыдущий смотрим дальше
манго
оп далее опять вложенность идем по адресу
вишня
киви
банан
оп тут тоже вложенность идем далее
яблоко
вишня
банан
оп все возвращаемся назад смотрим все считали ок возвращаемся назад дочитываем список
яблоко
груша
все отлично считали в вектор положили уррра
банан
апельсин
папайя
яблоко
вишня
банан
манго
вишня
киви
банан
яблоко
вишня
банан
яблоко
груша

Добавлено через 2 минуты
Назад в принципе я понял как возвращатся, запоминать адреса магазинов и после прочтения самого нижнего списка, переходить в магазин с адресом на предыдущем шаге, а вот как с нужной позиции считывать незнаю.
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
27.03.2015, 11:02 6
а где код?)
0
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
27.03.2015, 11:03  [ТС] 7
Код есть но мало, там функция получающая на вход адрес 1 магазина по нему начинаем считывать список ну и так далее(считываем список находим вложенность и возвращаем рекурсивно уже новый адрес ну и так далее до конца), тоесть считываю пока по 1 вложенности если их в списке больше то ввсе я приплыл и возвратится не могу и с какой позиции тоже незнаю, вы мне хоть накидайте суть или может кто уже писал, я сам закодю.
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
27.03.2015, 11:13 8
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include <list>
#include <iostream>
#include <string>
using namespace std;
 
struct List;
struct ListItem
{
    bool isArray = false;
    virtual string getName() = 0;
    virtual List* getNextList() = 0;
};
 
struct Fruit : public ListItem
{
    string name;
    virtual string getName()
    {
        return name;
    }
    virtual List* getNextList()
    {
        return nullptr;
    }
    Fruit(string n) :
        name(n)
    {
        isArray = false;
    }
};
struct Shop : public ListItem
{
    List* ptr = nullptr;
    virtual string getName()
    {
        return "";
    }
    virtual List* getNextList()
    {
        return ptr;
    }
    Shop(List* ptr1) :
        ptr(ptr1)
    {
        isArray = true;
    }
};
 
struct List
{
    std::list<ListItem*> m_arr;
};
 
 
class AllList
{
public:
    std::list<Fruit*> m_arr;
 
public:
    void show()
    {
        int index = 1;
        if ( !m_arr.empty() )
        {
            for ( auto it = m_arr.begin(); it != m_arr.end(); it++ )
            {
                cout << index << ". " << (*it)->getName() << endl;
                index++;
            }
        }
    }
    void parseList(List* ptr)
    {
        if ( ptr != nullptr )
        {
            if ( !ptr->m_arr.empty() )
            {
                for ( auto it = ptr->m_arr.begin(); it != ptr->m_arr.end(); it++ )
                {
                    if ( (*it)->isArray )
                    {
                        parseList((*it)->getNextList());
                    }
                    else
                    {
                        m_arr.push_back( new Fruit ((*it)->getName()) );
                    }
                }
            }
        }
    }
};
int main()
{
    List b;
    b.m_arr.push_back(new Fruit("Q"));
    b.m_arr.push_back(new Fruit("W"));
    b.m_arr.push_back(new Fruit("E"));
    List a;
    a.m_arr.push_back(new Fruit("A"));
    a.m_arr.push_back(new Fruit("B"));
    a.m_arr.push_back(new Fruit("C"));
    a.m_arr.push_back(new Shop(&b));
    List t;
    t.m_arr.push_back(new Fruit("H"));
    t.m_arr.push_back(new Fruit("I"));
    t.m_arr.push_back(new Fruit("O"));
    t.m_arr.push_back(new Shop(&a));
 
    AllList z;
    z.parseList(&t);
    z.show();
 
}
Сделал на скорую руку, левой рукой, пьяный, закрытими глаза, и в суде я буду опровергать, что это мой код.
0
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
27.03.2015, 15:07  [ТС] 9
тоесть непроверял я понял, все равно спс, обход в глубину насколько я тебя понял по коду

Добавлено через 3 часа 52 минуты
Реализовал, всем спс, довольно непросто
0
27.03.2015, 15:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.03.2015, 15:07
Помогаю со студенческими работами здесь

Обход элементов списка и их вывод
Всем доброго времени суток, уважаемые форумчане! Разбираюсь с Python'ом, даётся не так просто, как...

Реализовать обход бинарного дерева в ширину
необходимо реализовать обход вот этого бинарного дерева в ширину using System; using...

Реализовать обход в ширину и по порядку в дереве
Есть код, который реализует дерево, хранящее в узле ключ и значение: {-# LANGUAGE GADTs,...

Реализовать прошитое дерево и осуществить обратный обход
Доброго времени суток! Реализовать прошитое дерево и осуществить обратный обход, обеспечить...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru