1 / 1 / 0
Регистрация: 15.10.2018
Сообщений: 89
1

Список списков

09.03.2019, 17:49. Показов 1928. Ответов 20
Метки нет (Все метки)

Как работать с списками списков? Полазил в нете так и не нашел , всего пару тем на форумах и то не законченные.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.03.2019, 17:49
Ответы с готовыми решениями:

Список списков
Как реализовать конструкцию списка списков? std::list <HWND> List; В этот список у меня попадают...

Список списков)
задача: В некотором институте приобретаемые компьютеры выделяются различным ...

Из списков s1 и s2 образовать список s3.
Из списков s1 и s2 образовать список s3, включив в него элементы из s1, не содержащиеся в s2 и...

Список списков.Морской бой
Здравствуйте, форумчане. Прошу вашей помощи. Я новичок, и это моя первая программа. Есть...

20
Don't worry, be happy
17758 / 10526 / 2030
Регистрация: 27.09.2012
Сообщений: 26,502
Записей в блоге: 1
09.03.2019, 18:28 2
Так же, как со списками не списков, просто элементами списка будут списки.
0
1 / 1 / 0
Регистрация: 15.10.2018
Сообщений: 89
09.03.2019, 18:33  [ТС] 3
Да, а как на них ссылатся?? Никак не могу придумать вот есть 2 списка:
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
class CList
{
    struct list
    {
        int value; // что надо вместо этого????
        struct list *next;
    };
    struct list *head, *tail;
    public:
    CList();
    void addelem();
    void print();
};
 
class pCList
{
    struct plist
    {
        int pvalue;
        struct plist *pnext;
    };
    struct plist *phead, *ptail;
    public:
    pCList();
    void paddelem();
    void pprint();
}
Как мне сделать так чтоб в первом списке , был список второго списка, я не могу понять как указывать на список из другого списка?
0
2 / 1 / 1
Регистрация: 28.10.2014
Сообщений: 122
09.03.2019, 18:36 4
Используйте указатель на второй список. Но уточните что для Вас списки в этом коде
0
1 / 1 / 0
Регистрация: 15.10.2018
Сообщений: 89
09.03.2019, 18:39  [ТС] 5
Цитата Сообщение от Валерий_ Посмотреть сообщение
Используйте указатель на второй список.
Какой именно ?? Я пробывал указатель на голову второго списка , ничего не вышло, а придумать что-то ещё у меня не получилось, при сем при том запрещено пользоватся библиотекой списков(
0
2 / 1 / 1
Регистрация: 28.10.2014
Сообщений: 122
09.03.2019, 18:45 6
Зачем списки обёрнуты в классы?
0
1 / 1 / 0
Регистрация: 15.10.2018
Сообщений: 89
09.03.2019, 18:59  [ТС] 7
Я сейчас изучаю ООП и с++
0
5233 / 2887 / 1208
Регистрация: 07.02.2019
Сообщений: 7,284
09.03.2019, 19:06 8
можно через шаблон или базовый класс
0
1 / 1 / 0
Регистрация: 15.10.2018
Сообщений: 89
09.03.2019, 19:15  [ТС] 9
я за шаблон, по заданию нужен и он,
0
5233 / 2887 / 1208
Регистрация: 07.02.2019
Сообщений: 7,284
09.03.2019, 19:22 10
Тогда делаешь один шаблонный класс List, а в программе инициализируешь например так: List<List<some_type>> my_list;
0
1 / 1 / 0
Регистрация: 15.10.2018
Сообщений: 89
09.03.2019, 20:00  [ТС] 11
Сделал как вы сказали, только вот заваруха, а как элементы то туда добавлять?) И вообще как с ним работать? Это же не может быть обычный список который был у меня до этого...
0
5233 / 2887 / 1208
Регистрация: 07.02.2019
Сообщений: 7,284
09.03.2019, 20:05 12
покажите
0
2753 / 1908 / 568
Регистрация: 05.06.2014
Сообщений: 5,559
09.03.2019, 20:06 13
Цитата Сообщение от Lepricon228 Посмотреть сообщение
int value; // что надо вместо этого????
C++
1
pCList value;
Внезапно, да.
Цитата Сообщение от Lepricon228 Посмотреть сообщение
Сделал как вы сказали, только вот заваруха, а как элементы то туда добавлять?)
Добираетесь до вышеупомянутого value и пишете (тра-ля-ля)->value.addElement(бла-бла-бла).
0
1 / 1 / 0
Регистрация: 15.10.2018
Сообщений: 89
09.03.2019, 20:16  [ТС] 14
Для zayats80888:
всё заработало, только во со старым списком он не ладит, вот весь код, до списка списков он работал верно, хотябы добавление элементов и их вывод:
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
#include <cstdlib>
#include <ctime>
#include <fstream>
using namespace std;
 
template <typename T>
class CList
{
    public:
    struct list
    {
        T value;
        struct list *next;
    };
    struct list *head, *tail;
    CList()
    {
        head=NULL;
        cout<<"\nÊîíñòðóêòîð ñðàáîòàë.\n";
    }
    void Addlist(T);
    
    void Addlistl(CList<int> a)
    {
        struct list *newlist;;
        newlist = new struct list;
        newlist->value=a;
        if (head==NULL)
        {
            tail=head=newlist;
            head->next = NULL;
        }
        else
        {
            tail->next=newlist;
            newlist->next = NULL;
            tail = newlist;
        }
    }
    void removeall();
    bool DoubleEveryN(T);
    template <class output>
    friend ostream operator<<(ostream&, CList &);
    ~CList()
    {
        removeall();
        cout<<"\nÄåñòðóêòîð ñðàáîòàë.\n";
    }
};
 
 
template <typename T>
void CList<T>::removeall()
{
    if (head!=NULL)
    {
        struct list *p;
        while (head!=NULL)
        {
            p=head;
            head=head->next;
            delete p;
        }
        head=NULL;
    }
}
 
template <typename T>
bool CList<T>::DoubleEveryN(T a)
{
    int x=a;
    int count=0;
    struct list *newlist;
    struct list *ptr=head;
    struct list *curr=head;
    while(curr!=NULL)
    {
        count++;
        if(count%x==0)
        {
            newlist = new struct list;
            newlist->value=curr->value;
            //////////////////////////
            while(ptr->next!=curr)
            {
                ptr=ptr->next;
            }
            newlist->next=ptr->next;
            ptr->next=newlist;
        }
        curr=curr->next;
    }
    return true;
}
 
template <typename T>
void CList<T>::Addlist(T a)
{
    struct list *newlist;;
    newlist = new struct list;
    newlist->value=a;
    if (head==NULL)
    {
        tail=head=newlist;
        head->next = NULL;
    }
    else
    {
        tail->next=newlist;
        newlist->next = NULL;
        tail = newlist;
    }
}
 
 
 
template <typename T>
ostream & operator<<(ostream &out,const CList<T> &obj)
{
    cout<<"\nÂûâîæó âåñü ñïèñîê:>\n";
    typename CList<T>::list *list = obj.head;
    while(list != 0)
    {
        cout<<list->value<<"->";
        list = list->next;
    }
    cout<<"NULL\n";
    return out;
}
 
void menu()
{
    cout <<"\n 1 - äîáàâëåíèå ýëåìåíòà\n 2 - âûâîä ñïèñêà \n 3 - Çàäà÷à âàðèàíòà ¹ 8\n 4 - î÷èñòêà ñïèñêà\n ESC - âûõîä\n Âàø âûáîð:> \n";
}
 
int main()
{
    setlocale(0,"RUS");
    system("color f0");
    CList<int> list;
    CList<double> doublelist;
    CList<char> charlist;
    CList< CList<int> >my_list;
    int key, x;
    do
    {
        menu();
        key=getch();            
        switch(key)
        {
        case '1':
                for(int i=1;i<11;i++)
                {
                    list.Addlist(1.5*i);
                    charlist.Addlist(char(rand()%26*i+0x61));
                    doublelist.Addlist(1.332*i);
                    //my_list.Addlist(list);
                }
            break;
        case '2':
                cout<<list;
                cout<<charlist;
                cout<<doublelist;
                //cout<<my_list;
            break;
        case '3':
                cout << "Ââåäèòå èíäåêñ ýëåìåíòà êîòîðûé ïî ñ÷åòó áóäåò äóáëèðîâàòñÿ:> ";
                while(!(cin >> x) || x<=1)
                {
                    fflush(stdin);
                    cin.clear();
                    cout<<"Ââåäèòå ïîëîæèòåëüíîå ÷èñëî:> ";
                }
                list.DoubleEveryN(x);
                charlist.DoubleEveryN(x);
                doublelist.DoubleEveryN(x);
            break;
        case '4':
                list.removeall();
                charlist.removeall();
                doublelist.removeall();
            break;
        }
    }
    while(key!=27);
    return 0;
}
Добавлено через 31 секунду
Для Renji:
хорошо, чуть позже попробую.
0
5233 / 2887 / 1208
Регистрация: 07.02.2019
Сообщений: 7,284
09.03.2019, 20:22 15
а для чего функция в строке 29?
0
1 / 1 / 0
Регистрация: 15.10.2018
Сообщений: 89
09.03.2019, 20:28  [ТС] 16
это лишнее, её можно убрать
0
Комп_Оратор)
Эксперт по математике/физике
8726 / 4473 / 600
Регистрация: 04.12.2011
Сообщений: 13,362
Записей в блоге: 16
09.03.2019, 20:29 17
Lepricon228, в чём разница между классами:
CList и pCList ?
0
1 / 1 / 0
Регистрация: 15.10.2018
Сообщений: 89
09.03.2019, 20:35  [ТС] 18
Цитата Сообщение от IGPIGP Посмотреть сообщение
в чём разница между классами:
CList и pCList ?
изначально я думал сделать это через 2 класса, как было по тому небольшому кол-ву гайдов которые я нашел, потом всё преобразовать в шаблоны, но вот как видите мы обошлись без второго класса,
0
5233 / 2887 / 1208
Регистрация: 07.02.2019
Сообщений: 7,284
09.03.2019, 21:03 19
исправил очевидные ошибки, остальное сам
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
#include <cstdlib>
#include <ctime>
#include <fstream>
using namespace std;
 
template <typename T>
class CList
{
    public:
    struct list
    {
        T value;
        list *next;
    };
    list *head, *tail;
    CList()
    {
        head=NULL;
        cout<<"\nГЉГ®Г*ñòðóêòîð Г±Г°Г*áîòГ*Г«.\n";
    }
    void Addlist(T);
    void removeall();
    bool DoubleEveryN(int);
    const T& get_next(const list* lst)const{return lst->value;}
    ~CList()
    {
        removeall();
        cout<<"\nÄåñòðóêòîð Г±Г°Г*áîòГ*Г«.\n";
    }
};
 
 
template <typename T>
void CList<T>::removeall()
{
    while (head)
    {
        list *p(head);
        head=head->next;
        delete p;
    }
    tail=head;
}
 
template <typename T>
bool CList<T>::DoubleEveryN(int a)
{
    int count=0;
    list *newlist;
    list *ptr=head;
    list *curr=head;
    while(curr!=NULL)
    {
        count++;
        if(count%a==0)
        {
            newlist = new struct list;
            newlist->value=curr->value;
            //////////////////////////
            while(ptr->next!=curr)
            {
                ptr=ptr->next;
            }
            newlist->next=ptr->next;
            ptr->next=newlist;
        }
        curr=curr->next;
    }
    return true;
}
 
template <typename T>
void CList<T>::Addlist(T a)
{
    list *newlist;
    newlist = new list;
    newlist->value=a;
    if (head==NULL)
    {
        tail=head=newlist;
        head->next = NULL;
    }
    else
    {
        tail->next=newlist;
        newlist->next = NULL;
        tail = newlist;
    }
}
 
 
 
template <typename T>
ostream & operator<<(ostream &out,const CList<T> &obj)
{
    out<<"\nÂûâîæó ГўГҐГ±Гј ñïèñîê:>\n";
    typename CList<T>::list *list = obj.head;
    while(list != 0)
    {
        out<<obj.get_next(list)<<"->";
        list = list->next;
    }
    out<<"NULL\n";
    return out;
}
 
void menu()
{
    cout <<"\n 1 - äîáГ*âëåГ*ГЁГҐ ýëåìåГ*ГІГ*\n 2 - âûâîä Г±ГЇГЁГ±ГЄГ* \n 3 - Г‡Г*Г¤Г*Г·Г* ГўГ*ðèГ*Г*ГІГ* В№ 8\n 4 - î÷èñòêГ* Г±ГЇГЁГ±ГЄГ*\n ESC - âûõîä\n Г‚Г*Гё âûáîð:> \n";
}
 
int main()
{
    setlocale(0,"RUS");
    system("color f0");
    CList<int> list;
    CList<double> doublelist;
    CList<char> charlist;
    CList< CList<int> >my_list;
    int key, x;
    do
    {
        menu();
        key=_getch();            
        switch(key)
        {
        case '1':
                for(int i=1;i<11;i++)
                {
                    list.Addlist(2*i);
                    charlist.Addlist(char(rand()%26*i+0x61));
                    doublelist.Addlist(1.332*i);
                    my_list.Addlist(list);
                }
            break;
        case '2':
                cout<<list;
                cout<<charlist;
                cout<<doublelist;
                cout<<my_list;
            break;
        case '3':
                cout << "Ââåäèòå ГЁГ*äåêñ ýëåìåГ*ГІГ* êîòîðûé ГЇГ® Г±Г·ГҐГІГі áóäåò äóáëèðîâГ*ГІГ±Гї:> ";
                while(!(cin >> x) || x<=1)
                {
                    fflush(stdin);
                    cin.clear();
                    cout<<"Ââåäèòå ïîëîæèòåëüГ*îå ÷èñëî:> ";
                }
                list.DoubleEveryN(x);
                charlist.DoubleEveryN(x);
                doublelist.DoubleEveryN(x);
            break;
        case '4':
                list.removeall();
                charlist.removeall();
                doublelist.removeall();
            break;
        }
    }
    while(key!=27);
    return 0;
}
0
1 / 1 / 0
Регистрация: 15.10.2018
Сообщений: 89
09.03.2019, 21:17  [ТС] 20
Цитата Сообщение от zayats80888 Посмотреть сообщение
исправил очевидные ошибки, остальное сам
Извините конечно, но вы только убрали стракт, изменили чуть-чуть функцию перегрузки и, и все программа как выдавало число 82 так и выдает при этом ещё и крашится.
Список списков
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.03.2019, 21:17
Помогаю со студенческими работами здесь

АТД список. Объединение списков.
Здравствуйте! Подскажите пожалуйста как объединить два списка в один?? Или второй список...

Динамический список динамических списков
Всем экспертам привет. Нужна категорическая помощь). Задача такая, надо разобраться как работает...

Из списков s1 и s2 образовать список s3 (не используя STL)
а) Простой однонаправленный упорядоченный по возрастанию. b) Из списков s1 и s2 образовать список...

Из двух однонаправленных списков сформировать новый список
Из двух однонаправленных списков сформировать новый список, следующим образом: сначала записать...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru