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

Списки! - C++

Восстановить пароль Регистрация
 
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
16.09.2011, 21:59     Списки! #1
Объясните пожалуйста про списки с нуля. Как добавлять элементы, как удалять и что да как вообщем???? А то прочитал в книгах, Павловская, Дейтел и роберт Седжвик...ничего не понял вообще((( Пожалуйста объясните!. Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2011, 21:59     Списки!
Посмотрите здесь:

C++ C++ списки
C++ Списки в С++
C++ списки
С++ списки C++
C++ Списки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
snajper_ro
 Аватар для snajper_ro
51 / 51 / 16
Регистрация: 14.09.2011
Сообщений: 368
16.09.2011, 22:15     Списки! #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
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
194
195
196
197
198
199
//---------------------------------------------------------------------------
//бауся
#include <vcl.h>
#pragma hdrstop
#include <conio.h >
#include <iostream.h>
 
//---------------------------------------------------------------------------
 
struct list{
int info ;
list *next , *last ;
} *end ,*begin ,*t ;
 
void create(list** ,list** ,int,bool,int) ;
void view(list* ,int ,list** ,list**) ;
void del_all(list** ) ;
void task(list**,list**  ) ;
 
 
 
#pragma argsused
int main(int argc, char* argv[])
{
int quantity = 5, i , elem ,kod , endorbegin ;
bool firstelem = true ,flag = true ;
randomize() ;
while(true)
{
   cout << "\n\n 1:create and add , 2:viewing ,3:delete ,4:task ,0:exit   :" ;
        kod = getch() ;
                kod = kod - 48 ;
        switch(kod)
        {
        case 1:
 
        
        cout <<" \nInput a quantity the element: " ;
                cin >> quantity ;
                         cout <<" \nbegin - input 0  or end - any key:" ;
                                endorbegin = getch() ;
                                          endorbegin -= 48 ;
                                                    cout <<"    add - " << endorbegin ;
 
        for(i = 0;i < quantity; i ++ )
        {
                elem = random( 20 ) -10 ;
 
                                          cout <<"\n    elem = "<< elem  ;
 
 
 
 
                create(&begin ,&end ,elem ,flag,endorbegin) ;
                flag = false ;
                            firstelem = false ;
 
         }
 
 
 
        break ;
 
        case 2:
        if(begin !=NULL)
        {
        cout <<" \nView in the begin - input 0 or in the - input any key" ;
                   endorbegin = getch() ;
                            endorbegin -= 48 ;
                                 if(endorbegin == 0 )
                                t = begin ;
                        else t = end ;
           view(t ,endorbegin ,&end ,&begin ) ;
        }
 
        break ;
 
        case 3:
 
        del_all(&begin ) ;
        end = begin ;
        flag = firstelem = true ;
 
 
        break ;
        case 4 :
        if( begin != NULL )
        {
        task(&begin ,&end ) ;
        }
 
        break ;
 
        case -21:
 
        return 0 ;
        }
}
}
//---------------------------------------------------------------------------
void create(list** begin ,list** end ,int elem ,bool flag,int endorbegin)
{
if(flag){
  t = new list ;
  t -> info = elem ;
  t -> next = t -> last = NULL ;
  *begin = *end = t ;
  }
  else{
    t = new list ;
 t -> info = elem ;
 
 if(endorbegin == 0 )            //begin
 {
  t -> last = NULL ;
  t -> next = *begin ;
  (*begin) -> last = t ;
  *begin = t ;
 
 
 }
 else                                     //end
 {
 t -> next = NULL ;
 t -> last = *end ;
 (*end) -> next = t ;
 *end = t ;
 
 }
 
 
  }
}
 
void view(list *t , int endorbegin ,list **end ,list** begin )
{
cout <<endl ;
if( endorbegin == 0)
        cout <<"\n                The view begin \n" ;
else cout <<"\n            The viem end  \n" ;
while( t != NULL )
{
 
 cout <<t ->info  << endl ;
if(endorbegin == 0 )
t = t -> next ;
else t = t -> last ;
}
 
 
}
 
void del_all(list** begin )                  //delete
{
t = *begin ;
 
while(*begin != NULL)
{
 
t = t ->next  ;
delete begin ;
*begin = t ;
 
}
 
}
 
void task(list** begin ,list** end )                                 //task
{
cout << " task " ;
int check = 0 ;
 
     list * t = *begin ;
     list *tmin ,*tmax ;
     cout<<endl;
     for( check = 0 ; t!=NULL ; check ++ ,t = t ->next )     //
     {
 
           if( check %2 == 1 )
           {
              tmin = t ->last ;
               tmax = t ->next;
               delete t ;
               if(tmax !=NULL){
 
               tmin ->next =tmax ;
               tmax ->last =tmin ;
               t = tmin ;
               }
               else {
               tmin ->next =NULL;
               t = tmin ;
               }
 
           }
 
      *end = t ;
     }
}
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
16.09.2011, 22:19     Списки! #3
список - динамическая структура данных, где каждый элемент (звено) содержит значение и указатель на следующий элемент
т.е.
C++
1
2
3
4
5
6
template <typename value_type>
struct link
{
value_type value; // значение, которое хранится в звене
link* next; // указатель на след. элемент списка;
};
соот-но список можно представить как
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
template <typename value_type>
class list
{
link<value_type>* root; // начальный элемент списка;
public:
// конструктор
list() : root()
{
}
 
// добавление звена
void add_link(const value_type& value)
{
// если нет еще звеньев в списке
if (!root)
root = new link<value_type>(value);
else
{
current = root;
// ищем конец списка, туда добавлять элемент будем
while (current->next)
current = current->next;
 
current->next = new link<value_type>(value);
}
}
// удаление 
void delete_link(link<value>* value)
{
if (!root || !value)
return;
 
link<value>* current = root;
if (current == value)
{
root = current->next;
delete current;
}
 
while (current->next != value)
current = current->next;
 
if (current->next == value)
{
current->next = current->next->next;
delete current->next;
}
}
};
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
17.09.2011, 13:56  [ТС]     Списки! #4
А можете все это объяснить??? Мне препод задали задачу, создать список и внести туда "abc" и потом добавить между "b" и "c", "f". Как это вообще все сделать?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
17.09.2011, 15:20     Списки! #5
KOPC1886,

C++
1
2
3
4
std::list<char> lis = {'a', 'b', 'c'};
lis.insert(lis.begin() + 2, 'f');
std::copy(lis.begin(), lis.end(), std::ostream_iterator<char>(std::cout));
std::cout << std::endl;
Nameless One
Эксперт С++
 Аватар для Nameless One
5754 / 3403 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
17.09.2011, 15:44     Списки! #6
KOPC1886, тебе для решения задачи нужно создать свой тип данных (список), или можно пользоваться готовыми (stl)?
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
17.09.2011, 15:46     Списки! #7
Nameless One, конечно же свой)
на stl списки задание посложнее будет
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
17.09.2011, 18:14  [ТС]     Списки! #8
Свой список нужно создать, а я ничего вообще не понял в списках. Что там за стрелки -> ? как и что вообще???
Zverit
Уничтожитель печенек
 Аватар для Zverit
277 / 205 / 21
Регистрация: 07.02.2010
Сообщений: 723
17.09.2011, 18:55     Списки! #9
Цитата Сообщение от KOPC1886 Посмотреть сообщение
Что там за стрелки -> ?
-> тоже самое, что и разыменование указателя.

Не по теме:

И если вы это не знаете, я думаю вам еще рано разбираться со списками, подучите более ранние темы!

KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
17.09.2011, 19:11  [ТС]     Списки! #10
Мне препод дал задачу, которую я описал выше. Мне в понедельник надо ее здать и желательно разобраться как и что???? Помогите пожалуйста.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
17.09.2011, 19:13     Списки! #11
KOPC1886, Книжку в зубы и читать. Еще больше суток осталось.
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
17.09.2011, 20:08  [ТС]     Списки! #12
Я прочитал про списки в Дейтеле, Павловской и Роберте Седжвике. Но к сожалению ничего не понял(((
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
17.09.2011, 21:45     Списки! #13
KOPC1886, А я и не про списки говорю. Когда идет вопрос про косвенную адресацию в духе "а что это?" - значит вам надо не про списки читать. А вообще что-нибудь по С/С++ причем с самого начала.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.09.2011, 22:50     Списки!
Еще ссылки по теме:

Списки в c++ C++
Списки, как склеить списки между собой? C++

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

Или воспользуйтесь поиском по форуму:
snajper_ro
 Аватар для snajper_ro
51 / 51 / 16
Регистрация: 14.09.2011
Сообщений: 368
18.09.2011, 22:50     Списки! #14
кто ищет тот находит
Вложения
Тип файла: rar 2.rar (488.5 Кб, 19 просмотров)
Yandex
Объявления
18.09.2011, 22:50     Списки!
Ответ Создать тему
Опции темы

Текущее время: 21:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru