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

Разработать программу для реализации основных действий с двунаправленным динамическим списком (я правильно составила код?) - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Нэко
0 / 0 / 0
Регистрация: 08.08.2012
Сообщений: 22
24.08.2013, 13:21     Разработать программу для реализации основных действий с двунаправленным динамическим списком (я правильно составила код?) #1
Разработать программу для реализации основных действий с двунаправленным динамическим списком:
проход по списку в ПРЯМОМ направлении с выводом на экран информационных частей элементов
поиск элемента в ОБРАТНОМ направлении с заданной информационной частью
добавление нового элемента ПОСЛЕ заданного
удаление заданного элемента.

Все действия оформляются как подпрограммы.

Программная реализация выполняется в среде Windows с помощью пакета Delphi (или С++) с использованием стандартных компонентов отображения данных или в виде консольного приложения с простейшим диалогом.
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
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <stdlib.h>         // srand(), rand()
#include<time.h>            // Для генерации не повторяюшихся рангом чисел srand(time(NULL));
 
using namespace std;
int A[20];
int B[20];
int g=0;
 
struct Node
{
 int data;
 Node *next;
};
 
///списки
Node* dele(Node* Head, int Number);
//new_delete_one
Node* dele_one(Node* Head, int Number);
void insert(Node*&list,int l,int e);
//кол-во разных элементов
int coun(Node*&list,int x)
{
    int c=0;
    Node *start=list;
    while(list)
    {
        if(list->data==x)
            c++;
        list=list->next;
    }
    list=start;
    return c;
}
///вывод на экран
void display(Node*&spisok)
{
    while(spisok)
    {
        printf("%d\n",spisok->data);
        spisok=spisok->next;
    }
}
//№1
struct Node* inverse(struct Node *list1)   // Голова исходного списка, возвращаем указатель на новую голову
{
  struct Node *ptr=NULL, *tmp;
  while (list1)
  {
    tmp=list1->next;
    list1->next=ptr;
    ptr=list1;
    list1=tmp;
  }
  return ptr;
}
//№3
void move_start(Node*&spis)
{
    Node* start=spis;
    Node*n=new Node;
    Node*m=start->next;
    Node*t=new Node;
    int supertmp;
    while(spis->next->next!=NULL)
    {
        spis=spis->next;
    }
    n=spis->next;//последний элемент списка
    t=start;
    supertmp=n->data;
    spis->next=NULL;//обрезаем список
    t->next=n;
    n->next=m;
    int tmp=start->data;
    start->data=n->data;
    n->data=tmp;
    printf(" переносим последний элемент списка = %d в начало списка\n",supertmp);
}
//№5
int count(Node*&list)
{
    int county=0;
    Node*start=list;
    while(list)
    {
        if(coun(list,list->data)==1)
        {
            county++;
        }
        list=list->next;
    }
    return county;
}
//№7
Node* move_back(Node*list)
{
    Node*start=list;
    int tmp=list->data;
    list=list->next;
    start=list;
    while(list->next)
    {
        list=list->next;
    }
    list->next=new Node;
    list->next->data=tmp;
    list->next->next=NULL;
    printf(" переставляем 1-ый элемент списка = %d в конец списка.)\n",tmp);
    return start;
 
}
//№9
void del_equ(Node*list)
{
    Node*start=list;
    while(list)
    {
        if(list->data==list->next->data)
        {
            if(coun(list,list->data)>1)
            {
                printf(" удаляем элемент = %d\n",list->data);
                dele_one(start,list->data);
                list=start;
                break;
            }
        }
        list=list->next;
    }
}
//№11
void slip(Node*&list,int x)
{
    Node*start=list;
    Node*list2=new Node;
    list2->data=list->data;
    Node*start2=list2;
    list=list->next;
    //создаем копию списка
    while(list!=NULL)
    {
        list2->next = new Node;   // создаем элемент (и сразу устанавливаем ссылку на него из текущего)    
        list2->next->data=list->data;  // добавляем данные
        list2->next->next = NULL;   // следующий элемент - NULL
        list2 = list2->next; 
        list=list->next;
    }
    list2=start2;
    list=start;
    //ищем элемент x в списке
    while(list)
    {
        if(list->data==x)
        {
            list->next=list2;
            break;
        }
        list=list->next;
    }
}
//find
int find(Node* Head, int DataItem)
{
    Node *start; //вспомогательным указатель
    int count=0;
    start = Head;
    while (start != NULL)
    {   //пока не конец списка
        count++;
        if (DataItem == start->data) 
        {
            return count; 
        }
        else 
            start = start->next;
    }
    return 0;
}
//new_delete_one
Node* dele_one(Node* Head, int Number)
{
    while(find(Head,Number))
    {
        Node *start=new Node;//вспомогательный указатель
        Node *list=new Node;
        list= Head;
        for (int i = 1; i < find(Head,Number) && list != NULL; i++)
            list = list->next;
                if (list != NULL)
                {   //проверка на корректность
                    if (list == Head)
                    {   //удаляем первый элемент
                        Head = Head->next;
                        delete(list);
                        
                    list = Head;
                    break;
                    }
                    else 
                    {   //удаляем непервый элемент
                        start = Head;
                        while (start->next != list)
                            start = start->next; 
                        start->next = list->next;
                        delete(list);
                        list=start;
                        break;
                    }
                }
    }
    return Head;
}
//№13
void insert_el(Node*&list,int val)
{
    Node*start=list;
    while(list)
    {
        if(list->next->data>val)
        {
            list=start;
            insert(list,val,list->next->next->data);
            break;
        }
        list=list->next;
    }
}
//№15
Node* dele(Node* Head, int Number)
{
    while(find(Head,Number))
    {
        Node *start=new Node;//вспомогательный указатель
        Node *list=new Node;
        list= Head;
        for (int i = 1; i < find(Head,Number) && list != NULL; i++)
            list = list->next;
                if (list != NULL)
                {   //проверка на корректность
                    if (list == Head)
                    {   //удаляем первый элемент
                        Head = Head->next;
                        delete(list);
                    list = Head;
                    }
                    else 
                    {   //удаляем непервый элемент
                        start = Head;
                        while (start->next != list)
                            start = start->next; 
                        start->next = list->next;
                        delete(list);
                        list=start;
                    }
                }
    }
    return Head;
}
//№17
void del_copy(Node*&list)
{
    Node*start=list;
    int tmp;
    while(list->next)
    {
        if(list->data==list->next->data)
        {
            tmp=list->data;
            list=start;
            dele_one(list,tmp);
            list=start; 
        }
        list=list->next;
    }
}
//№19
//21
void read()
{
    FILE*f1;
    FILE*f2;
    int tmp;
    Node *start;    // указатель на начало списка
    Node* spis = new Node;    // создаем список
    Node* spis2 = new Node;
    Node* start2=spis2;
    start=spis;
    f1=fopen("list1.txt","rt");
    f2=fopen("list2.txt","rt");
    fscanf(f1,"%d",&tmp);
    spis->data=tmp;   // инициализируем его данными
    spis->next=NULL;
    fscanf(f2,"%d",&tmp);
    spis2->data=tmp;   // инициализируем его данными
    spis2->next=NULL;
    while(!feof(f1))
    {
        fscanf(f1,"%d",&tmp);
        spis->next = new Node;   // создаем элемент (и сразу устанавливаем ссылку на него из текущего)    
          spis->next->data=tmp;// добавляем данные
          spis->next->next = NULL;   // следующий элемент - NULL
          spis = spis->next;   
    }
    printf("List 1:\n");
    spis=start;
    display(spis);
    while(!feof(f2))
    {
        fscanf(f2,"%d",&tmp);
        spis2->next = new Node;   // создаем элемент (и сразу устанавливаем ссылку на него из текущего)    
          spis2->next->data=tmp;// добавляем данные
          spis2->next->next = NULL;   // следующий элемент - NULL
          spis2 = spis2->next; 
    }
    printf("\nList 2:\n");
    spis2=start2;
    display(spis2);
    spis=start;
    spis2=start2;
    while(spis->next)
    {
        spis=spis->next;
    }
    spis->next=spis2;
    printf("\nNew List 1:\n");
    spis=start;
    display(spis);
}
void insert(Node*&list,int l,int e)
{
    Node*add=new Node;
    add->data=l;
    if(list->data==e)
    {
        add->next=list->next;
        list->next=add;
        add->data=list->data;
        list->data=l;
    }
    else
    {
        while(list)
        {
            if(list->next)
            {
                if(list->next->data==e)
                {
                    add->next=list->next;
                    list->next=add;
                    break;
                }
            }
            list=list->next;
        }
    }
}
//№23
void two(Node*&list1,Node*&list2,int x)
{
    Node*start=list1;
    Node*pos=list1;
    int f=0;
    while(list1)
    {
        if(list1->data==x||f==1)
        {
            if(f==0)
            {
                
                pos=list1;
                list1=list1->next;
                list2->data=list1->data;
                list2->next=NULL;
                f=1;
            }
            else
            {
                list2->next = new Node;   // создаем элемент (и сразу устанавливаем ссылку на него из текущего)    
                list2->next->data=list1->data;  // добавляем данные
                list2->next->next = NULL;   // следующий элемент - NULL
                list2 = list2->next;
            }
        }
        list1=list1->next;
    }
    if(f==1)
    {
        list1=pos;
        list1->next=NULL;
    }
}
//№25
void doubl_list(Node*&list)
{
    Node*start=list;
    Node*list2=new Node;
    list2->data=list->data;
    Node*start2=list2;
    list=list->next;
    //создаем копию списка
    while(list!=NULL)
    {
        list2->next = new Node;   // создаем элемент (и сразу устанавливаем ссылку на него из текущего)    
        list2->next->data=list->data;  // добавляем данные
        list2->next->next = NULL;   // следующий элемент - NULL
        list2 = list2->next; 
        list=list->next;
    }
    list2=start2;
    list=start;
    while(list)
    {
        if(list->next==NULL)
        {
            list->next=list2;
            break;
        }
        list=list->next;
    }
}
//№27
void re_move(Node*&list,int x,int y)
{
    Node*start=list;
    int ok=0;
    while(list)
    {
        if(list->data==x)
        {
            ok++;
        }
        if(list->data==y)
        {
            ok++;
        }
        list=list->next;
    }
    list=start;
    if(ok==2)
    {
        while(list)
        {
            if(list->data==x)
            {
                list->data=y;
            }
            else
            {
                if(list->data==y)
                {
                    list->data=x;
                }
            }
            list=list->next;
        }
    }
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.08.2013, 13:21     Разработать программу для реализации основных действий с двунаправленным динамическим списком (я правильно составила код?)
Посмотрите здесь:

Работа с двунаправленным списком и с шаблонами в С++ C++
C++ Стандартная библиотека шаблонов STL и класс list по работе с двунаправленным списком
Стандартная библиотека шаблонов STL и класс list по работе с двунаправленным списком C++
C++ Разработать программу для работы с двунаправленным связными списками.
C++ Шифровка текста двунаправленным списком
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
24.08.2013, 13:24     Разработать программу для реализации основных действий с двунаправленным динамическим списком (я правильно составила код?) #2
std::list
Нэко
0 / 0 / 0
Регистрация: 08.08.2012
Сообщений: 22
24.08.2013, 13:26  [ТС]     Разработать программу для реализации основных действий с двунаправленным динамическим списком (я правильно составила код?) #3
Цитата Сообщение от Nekto Посмотреть сообщение
std::list
где?
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
24.08.2013, 13:29     Разработать программу для реализации основных действий с двунаправленным динамическим списком (я правильно составила код?) #4
Цитата Сообщение от Нэко Посмотреть сообщение
Для генерации не повторяюшихся рангом чисел srand(time(NULL));
Что такое ранг чисел?

Добавлено через 44 секунды
Цитата Сообщение от Nekto Посмотреть сообщение
std::list
если начинать с std::list, ты никогда не узнаешь, что такое список
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
24.08.2013, 13:30     Разработать программу для реализации основных действий с двунаправленным динамическим списком (я правильно составила код?) #5
Цитата Сообщение от Нэко Посмотреть сообщение
где?
Вместо всей программы. Я не вижу запрета на использование стандартных контейнеров. http://ru.cppreference.com/w/cpp/container/list
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
24.08.2013, 13:33     Разработать программу для реализации основных действий с двунаправленным динамическим списком (я правильно составила код?) #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Нэко Посмотреть сообщение
Node* dele(Node* Head, int Number);
//new_delete_one
Node* dele_one(Node* Head, int Number);
//кол-во разных элементов
int coun(Node*&list,int x)
А последняя буква из названий функций стёрта, чтоб не было подозрений, что программа взята у соседа по парте?

Добавлено через 2 минуты
Цитата Сообщение от Nekto Посмотреть сообщение
Вместо всей программы. Я не вижу запрета на использование стандартных контейнеров. http://ru.cppreference.com/w/cpp/container/list
не надо выпендриваться. Изучать списки следует, именно самомтоятельно их реализуя. Как ты иначе объяснишь, что это такое и чем они лучше/хуже, например массива?
Нэко
0 / 0 / 0
Регистрация: 08.08.2012
Сообщений: 22
24.08.2013, 13:36  [ТС]     Разработать программу для реализации основных действий с двунаправленным динамическим списком (я правильно составила код?) #7
[QUOTE=Kuzia domovenok;4981611]Что такое ранг чисел?

Ранг числа — это его величина относительно других значений в списке.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
24.08.2013, 13:37     Разработать программу для реализации основных действий с двунаправленным динамическим списком (я правильно составила код?) #8
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
не надо выпендриваться. Изучать списки следует, именно самомтоятельно их реализуя. Как ты иначе объяснишь, что это такое и чем они лучше/хуже, например массива?
Нужно изучить сам алгоритм без привязок к языкам программирования и реализациям. Изобретать для этого свои велосипеды не нужно.
Нэко
0 / 0 / 0
Регистрация: 08.08.2012
Сообщений: 22
24.08.2013, 13:47  [ТС]     Разработать программу для реализации основных действий с двунаправленным динамическим списком (я правильно составила код?) #9
вы не первые ,кто говорит мне про велосипет , все что я тут всталила , немного из викеда ,форума и ещё множества сайтов , лекции фиговые , основ нет, так в программ visual я так и не разобралась, вот и прошу проверить, помогите пожалуйста!
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.08.2013, 13:53     Разработать программу для реализации основных действий с двунаправленным динамическим списком (я правильно составила код?) #10
Цитата Сообщение от Nekto Посмотреть сообщение
Нужно изучить сам алгоритм без привязок к языкам программирования и реализациям.
Лучшее изучение, когда теория с практикой сочетается. Для этого и нужно "изобретать велосипеды".
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
24.08.2013, 13:53     Разработать программу для реализации основных действий с двунаправленным динамическим списком (я правильно составила код?) #11
Цитата Сообщение от Нэко Посмотреть сообщение
вы не первые ,кто говорит мне про велосипет , все что я тут всталила , немного из викеда ,форума и ещё множества сайтов , лекции фиговые , основ нет, так в программ visual я так и не разобралась, вот и прошу проверить, помогите пожалуйста!
"Программная реализация выполняется в среде Windows с помощью пакета Delphi (или С++) с использованием стандартных компонентов отображения данных или в виде консольного приложения с простейшим диалогом."

Я не вижу никакого консольного приложения. Для начала напиши int main(), реализуй какое-то взаимодействие. При дебаге можно будет увидеть, где ошибки вылазят. А так читать сплошную простыню кода сложно.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.08.2013, 14:13     Разработать программу для реализации основных действий с двунаправленным динамическим списком (я правильно составила код?) #12
Для тех, кто захочет разбираться:
Кликните здесь для просмотра всего текста
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
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
#include <iostream>
#include <conio.h>
#include <stdlib.h> // srand(), rand()
#include<time.h> // Для генерации не повторяюшихся рангом чисел srand(time(NULL));
 
 using namespace std;
 
 int A[20];
 int B[20];
 int g=0;
 
 struct Node
 {
     int data;
     Node *next;
 };
 
 ///списки
 Node* dele(Node* Head, int Number);
 
 //new_delete_one
 Node* dele_one(Node* Head, int Number);
 void insert(Node*&list,int l,int e);
 
 //кол-во разных элементов
 int coun(Node*&list,int x)
 {
     int c=0;
     Node *start=list;
     while(list)
     {
         if(list->data==x)
         c++;
         list=list->next;
     }
     list=start;
     return c;
 }
 
 ///вывод на экран
 void display(Node*&spisok)
 {
     while(spisok)
     {
         printf("%d\n",spisok->data);
         spisok=spisok->next;
     }
 }
 
 //№1
 struct Node* inverse(struct Node *list1) // Голова исходного списка, возвращаем указатель на новую голову
 {
     struct Node *ptr=NULL, *tmp;
     while (list1)
     {
         tmp=list1->next;
         list1->next=ptr;
         ptr=list1;
         list1=tmp;
     }
     return ptr;
 }
 
 //№3
 void move_start(Node*&spis)
 {
     Node* start=spis;
     Node*n=new Node;
     Node*m=start->next;
     Node*t=new Node;
     int supertmp;
     while(spis->next->next!=NULL)
     {
        spis=spis->next;
     }
     n=spis->next;//последний элемент списка
     t=start;
     supertmp=n->data;
     spis->next=NULL;//обрезаем список
     t->next=n;
     n->next=m;
     int tmp=start->data;
     start->data=n->data;
     n->data=tmp;
     printf(" переносим последний элемент списка = %d в начало списка\n",supertmp);
 }
 
 //№5
 int count(Node*&list)
 {
     int county=0;
     Node*start=list;
     while(list)
     {
         if(coun(list,list->data)==1)
         {
         county++;
         }
         list=list->next;
     }
     return county;
 }
 
 //№7
 Node* move_back(Node*list)
 {
     Node*start=list;
     int tmp=list->data;
     list=list->next;
     start=list;
     while(list->next)
     {
        list=list->next;
     }
     list->next=new Node;
     list->next->data=tmp;
     list->next->next=NULL;
     printf(" переставляем 1-ый элемент списка = %d в конец списка.)\n",tmp);
     return start;
}
 
 //№9
 void del_equ(Node*list)
 {
     Node*start=list;
     while(list)
     {
         if(list->data==list->next->data)
             {
             if(coun(list,list->data)>1)
             {
                 printf(" удаляем элемент = %d\n",list->data);
                 dele_one(start,list->data);
                 list=start;
                 break;
             }
         }
         list=list->next;
     }
 }
 
 //№11
 void slip(Node*&list,int x)
 {
     Node*start=list;
     Node*list2=new Node;
     list2->data=list->data;
     Node*start2=list2;
     list=list->next;
     //создаем копию списка
     while(list!=NULL)
     {
         list2->next = new Node; // создаем элемент (и сразу устанавливаем ссылку на него из текущего) 
         list2->next->data=list->data; // добавляем данные
         list2->next->next = NULL; // следующий элемент - NULL
         list2 = list2->next; 
         list=list->next;
     }
     list2=start2;
     list=start;
     //ищем элемент x в списке
     while(list)
     {
        if(list->data==x)
     {
     list->next=list2;
     break;
     }
        list=list->next;
     }
 }
 
 //find
 int find(Node* Head, int DataItem)
 {
     Node *start; //вспомогательным указатель
     int count=0;
     start = Head;
     while (start != NULL)
     { //пока не конец списка
         count++;
         if (DataItem == start->data) 
         {
            return count; 
         }
         else 
            start = start->next;
     }
     return 0;
 }
 
 //new_delete_one
 Node* dele_one(Node* Head, int Number)
 {
     while(find(Head,Number))
     {
         Node *start=new Node;//вспомогательный указатель
         Node *list=new Node;
         list= Head;
         for (int i = 1; i < find(Head,Number) && list != NULL; i++)
            list = list->next;
         if (list != NULL)
         { //проверка на корректность
             if (list == Head)
             { //удаляем первый элемент
                 Head = Head->next;
                 delete(list);
 
                 list = Head;
                 break;
             }
             else 
             { //удаляем непервый элемент
                 start = Head;
                 while (start->next != list)
                    start = start->next; 
                 start->next = list->next;
                 delete(list);
                 list=start;
                 break;
             }
         }
     }
     return Head;
 }
 
 //№13
 void insert_el(Node*&list,int val)
 {
     Node*start=list;
     while(list)
     {
         if(list->next->data>val)
         {
             list=start;
             insert(list,val,list->next->next->data);
             break;
         }
         list=list->next;
     }
 }
 
 //№15
 Node* dele(Node* Head, int Number)
 {
     while(find(Head,Number))
     {
         Node *start=new Node;//вспомогательный указатель
         Node *list=new Node;
         list= Head;
         for (int i = 1; i < find(Head,Number) && list != NULL; i++)
            list = list->next;
         if (list != NULL)
         { //проверка на корректность
             if (list == Head)
             { //удаляем первый элемент
                 Head = Head->next;
                 delete(list);
                 list = Head;
             }
             else 
             { //удаляем непервый элемент
                 start = Head;
                 while (start->next != list)
                    start = start->next; 
                 start->next = list->next;
                 delete(list);
                 list=start;
             }
         }
     }
     return Head;
 }
 
 //№17
 void del_copy(Node*&list)
 {
     Node*start=list;
     int tmp;
     while(list->next)
     {
         if(list->data==list->next->data)
         {
             tmp=list->data;
             list=start;
             dele_one(list,tmp);
             list=start; 
         }
         list=list->next;
     }
 }
 
 //№19
 //21
 void read()
 {
     FILE*f1;
     FILE*f2;
     int tmp;
     Node *start; // указатель на начало списка
     Node* spis = new Node; // создаем список
     Node* spis2 = new Node;
     Node* start2=spis2;
     start=spis;
     f1=fopen("list1.txt","rt");
     f2=fopen("list2.txt","rt");
     fscanf(f1,"%d",&tmp);
     spis->data=tmp; // инициализируем его данными
     spis->next=NULL;
     fscanf(f2,"%d",&tmp);
     spis2->data=tmp; // инициализируем его данными
     spis2->next=NULL;
     while(!feof(f1))
     {
         fscanf(f1,"%d",&tmp);
         spis->next = new Node; // создаем элемент (и сразу устанавливаем ссылку на него из текущего) 
         spis->next->data=tmp;// добавляем данные
         spis->next->next = NULL; // следующий элемент - NULL
         spis = spis->next; 
     }
     printf("List 1:\n");
     spis=start;
     display(spis);
     while(!feof(f2))
     {
         fscanf(f2,"%d",&tmp);
         spis2->next = new Node; // создаем элемент (и сразу устанавливаем ссылку на него из текущего) 
         spis2->next->data=tmp;// добавляем данные
         spis2->next->next = NULL; // следующий элемент - NULL
         spis2 = spis2->next; 
     }
     printf("\nList 2:\n");
     spis2=start2;
     display(spis2);
     spis=start;
     spis2=start2;
     while(spis->next)
     {
        spis=spis->next;
     }
     spis->next=spis2;
     printf("\nNew List 1:\n");
     spis=start;
     display(spis);
 }
 
 void insert(Node*&list,int l,int e)
 {
     Node*add=new Node;
     add->data=l;
     if(list->data==e)
     {
         add->next=list->next;
         list->next=add;
         add->data=list->data;
         list->data=l;
     }
     else
     {
         while(list)
         {
             if(list->next)
             {
                 if(list->next->data==e)
                 {
                     add->next=list->next;
                     list->next=add;
                     break;
                 }
             }
             list=list->next;
         }
     }
 }
 
 //№23
 void two(Node*&list1,Node*&list2,int x)
 {
     Node*start=list1;
     Node*pos=list1;
     int f=0;
     while(list1)
     {
         if(list1->data==x||f==1)
         {
             if(f==0)
             {
 
                 pos=list1;
                 list1=list1->next;
                 list2->data=list1->data;
                 list2->next=NULL;
                 f=1;
             }
             else
             {
                 list2->next = new Node; // создаем элемент (и сразу устанавливаем ссылку на него из текущего) 
                 list2->next->data=list1->data; // добавляем данные
                 list2->next->next = NULL; // следующий элемент - NULL
                 list2 = list2->next;
             }
         }
         list1=list1->next;
     }
     if(f==1)
     {
         list1=pos;
         list1->next=NULL;
     }
 }
 
 //№25
 void doubl_list(Node*&list)
 {
     Node*start=list;
     Node*list2=new Node;
     list2->data=list->data;
     Node*start2=list2;
     list=list->next;
     //создаем копию списка
     while(list!=NULL)
     {
         list2->next = new Node; // создаем элемент (и сразу устанавливаем ссылку на него из текущего) 
         list2->next->data=list->data; // добавляем данные
         list2->next->next = NULL; // следующий элемент - NULL
         list2 = list2->next; 
         list=list->next;
     }
     list2=start2;
     list=start;
     while(list)
     {
         if(list->next==NULL)
         {
             list->next=list2;
             break;
         }
         list=list->next;
     }
 }
 
 //№27
 void re_move(Node*&list,int x,int y)
 {
     Node*start=list;
     int ok=0;
     while(list)
     {
         if(list->data==x)
         {
            ok++;
         }
         if(list->data==y)
         {
            ok++;
         }
         list=list->next;
     }
     list=start;
     if(ok==2)
     {
         while(list)
         {
             if(list->data==x)
             {
                list->data=y;
             }
             else
             {
                 if(list->data==y)
                 {
                    list->data=x;
                 }
             }
             list=list->next;
         }
     }
 }
Нэко
0 / 0 / 0
Регистрация: 08.08.2012
Сообщений: 22
24.08.2013, 16:06  [ТС]     Разработать программу для реализации основных действий с двунаправленным динамическим списком (я правильно составила код?) #13
Цитата Сообщение от Nekto Посмотреть сообщение
"Программная реализация выполняется в среде Windows с помощью пакета Delphi (или С++) с использованием стандартных компонентов отображения данных или в виде консольного приложения с простейшим диалогом."

Я не вижу никакого консольного приложения. Для начала напиши int main(), реализуй какое-то взаимодействие. При дебаге можно будет увидеть, где ошибки вылазят. А так читать сплошную простыню кода сложно.
хорошо , а всё остальное ,я правильно написала?
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
24.08.2013, 16:13     Разработать программу для реализации основных действий с двунаправленным динамическим списком (я правильно составила код?) #14
Цитата Сообщение от Нэко Посмотреть сообщение
хорошо , а всё остальное ,я правильно написала?
Ну что за вопрос. Для этого используют "модульное тестирование". Сначала пишешь тест какой-нибудь одной функции. Проверяешь, правильно ли работает. Если правильно, то пишешь тест для следующей функции, проверяешь. Если неправильно, начинаешь уже искать ошибку. А кинуть кучу кода, который даже нигде не вызывается, это неправильно ИМХО.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
24.08.2013, 16:14     Разработать программу для реализации основных действий с двунаправленным динамическим списком (я правильно составила код?) #15
Цитата Сообщение от Нэко Посмотреть сообщение
хорошо , а всё остальное
Что значит "остальное"? Программа просто не соберётся, не запустится без функции main!
Нэко
0 / 0 / 0
Регистрация: 08.08.2012
Сообщений: 22
24.08.2013, 16:19  [ТС]     Разработать программу для реализации основных действий с двунаправленным динамическим списком (я правильно составила код?) #16
я об ошибках
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.08.2013, 17:09     Разработать программу для реализации основных действий с двунаправленным динамическим списком (я правильно составила код?) #17
Цитата Сообщение от Нэко Посмотреть сообщение
я об ошибках
Если main() добавить, то компилируется без ошибок. Если об ошибках в работе, то сами проверьте.
zer0mail
24.08.2013, 17:23
  #18

Не по теме:

Имхо, ТС хочет не понять работу списков, а сдать задачу (причем не свою). Иначе бы main был, притом с набором элементарных тестов, и текст в первом сообщении был отформатирован и скрыт, и фраз типа "Ранг числа — это его величина относительно других значений в списке" не было...

Нэко
0 / 0 / 0
Регистрация: 08.08.2012
Сообщений: 22
25.08.2013, 13:58  [ТС]     Разработать программу для реализации основных действий с двунаправленным динамическим списком (я правильно составила код?) #19
Цитата Сообщение от alsav22 Посмотреть сообщение
Если main() добавить, то компилируется без ошибок. Если об ошибках в работе, то сами проверьте.
скажите пожалуйста , что такое main() и куда его вставить?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.08.2013, 14:15     Разработать программу для реализации основных действий с двунаправленным динамическим списком (я правильно составила код?)
Еще ссылки по теме:

C++ Создать программу для реализации основных действий с двунаправленным динамическим списком
C++ Разработать программу для реализации числ.метода парабол
Работа с двунаправленным списком C++

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

Или воспользуйтесь поиском по форуму:
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6172 / 2901 / 284
Регистрация: 04.12.2011
Сообщений: 7,722
Записей в блоге: 3
25.08.2013, 14:15     Разработать программу для реализации основных действий с двунаправленным динамическим списком (я правильно составила код?) #20
Нэко, недоумение людей вполне понятно. С одной стороны, реализация линейного, двусвязного списка это не 10 строк. С другой, примеров в источниках полно. С третьей, Вы не знаете куда вставить main. Просто так и хочется ответить, что не в список!
Напишите список. И на вопрос, вроде: что не так в функции вставки, Вы получите ответ.
Yandex
Объявления
25.08.2013, 14:15     Разработать программу для реализации основных действий с двунаправленным динамическим списком (я правильно составила код?)
Ответ Создать тему
Опции темы

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