Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 08.08.2012
Сообщений: 22
1

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

24.08.2013, 13:21. Показов 2766. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Разработать программу для реализации основных действий с двунаправленным динамическим списком:
проход по списку в ПРЯМОМ направлении с выводом на экран информационных частей элементов
поиск элемента в ОБРАТНОМ направлении с заданной информационной частью
добавление нового элемента ПОСЛЕ заданного
удаление заданного элемента.

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

Программная реализация выполняется в среде 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;
        }
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.08.2013, 13:21
Ответы с готовыми решениями:

Создать программу для реализации основных действий с двунаправленным динамическим списком
Помогите пожалуйста разобраться в программе Visual Studio 2010!!! Что нужно сделать ? что бы...

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

Разработать иерархию не менее 2 классов, и программу Разработать программу для реализации игры пятнашки. Разработать 2-3
Составить описание класса многочленов от одной переменной, задаваемых степенью многочлена и...

Разработать программу для реализации основных действий с линейным динамическим списком
Здравствуйте, помогите пожалуйста с заданием. Горю через 2 дня здавать работу. Заданее следующее:...

22
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
24.08.2013, 13:24 2
std::list
0
0 / 0 / 0
Регистрация: 08.08.2012
Сообщений: 22
24.08.2013, 13:26  [ТС] 3
Цитата Сообщение от Nekto Посмотреть сообщение
std::list
где?
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,495
Записей в блоге: 1
24.08.2013, 13:29 4
Цитата Сообщение от Нэко Посмотреть сообщение
Для генерации не повторяюшихся рангом чисел srand(time(NULL));
Что такое ранг чисел?

Добавлено через 44 секунды
Цитата Сообщение от Nekto Посмотреть сообщение
std::list
если начинать с std::list, ты никогда не узнаешь, что такое список
1
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
24.08.2013, 13:30 5
Цитата Сообщение от Нэко Посмотреть сообщение
где?
Вместо всей программы. Я не вижу запрета на использование стандартных контейнеров. http://ru.cppreference.com/w/cpp/container/list
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,495
Записей в блоге: 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
не надо выпендриваться. Изучать списки следует, именно самомтоятельно их реализуя. Как ты иначе объяснишь, что это такое и чем они лучше/хуже, например массива?
4
0 / 0 / 0
Регистрация: 08.08.2012
Сообщений: 22
24.08.2013, 13:36  [ТС] 7
[QUOTE=Kuzia domovenok;4981611]Что такое ранг чисел?

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

Я не вижу никакого консольного приложения. Для начала напиши int main(), реализуй какое-то взаимодействие. При дебаге можно будет увидеть, где ошибки вылазят. А так читать сплошную простыню кода сложно.
0
5498 / 4893 / 831
Регистрация: 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 / 0
Регистрация: 08.08.2012
Сообщений: 22
24.08.2013, 16:06  [ТС] 13
Цитата Сообщение от Nekto Посмотреть сообщение
"Программная реализация выполняется в среде Windows с помощью пакета Delphi (или С++) с использованием стандартных компонентов отображения данных или в виде консольного приложения с простейшим диалогом."

Я не вижу никакого консольного приложения. Для начала напиши int main(), реализуй какое-то взаимодействие. При дебаге можно будет увидеть, где ошибки вылазят. А так читать сплошную простыню кода сложно.
хорошо , а всё остальное ,я правильно написала?
0
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
24.08.2013, 16:13 14
Цитата Сообщение от Нэко Посмотреть сообщение
хорошо , а всё остальное ,я правильно написала?
Ну что за вопрос. Для этого используют "модульное тестирование". Сначала пишешь тест какой-нибудь одной функции. Проверяешь, правильно ли работает. Если правильно, то пишешь тест для следующей функции, проверяешь. Если неправильно, начинаешь уже искать ошибку. А кинуть кучу кода, который даже нигде не вызывается, это неправильно ИМХО.
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,495
Записей в блоге: 1
24.08.2013, 16:14 15
Цитата Сообщение от Нэко Посмотреть сообщение
хорошо , а всё остальное
Что значит "остальное"? Программа просто не соберётся, не запустится без функции main!
0
0 / 0 / 0
Регистрация: 08.08.2012
Сообщений: 22
24.08.2013, 16:19  [ТС] 16
я об ошибках
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
24.08.2013, 17:09 17
Цитата Сообщение от Нэко Посмотреть сообщение
я об ошибках
Если main() добавить, то компилируется без ошибок. Если об ошибках в работе, то сами проверьте.
0
zer0mail
24.08.2013, 17:23
  #18

Не по теме:

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

0
0 / 0 / 0
Регистрация: 08.08.2012
Сообщений: 22
25.08.2013, 13:58  [ТС] 19
Цитата Сообщение от alsav22 Посмотреть сообщение
Если main() добавить, то компилируется без ошибок. Если об ошибках в работе, то сами проверьте.
скажите пожалуйста , что такое main() и куда его вставить?
0
Комп_Оратор)
Эксперт по математике/физике
8950 / 4704 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
25.08.2013, 14:15 20
Нэко, недоумение людей вполне понятно. С одной стороны, реализация линейного, двусвязного списка это не 10 строк. С другой, примеров в источниках полно. С третьей, Вы не знаете куда вставить main. Просто так и хочется ответить, что не в список!
Напишите список. И на вопрос, вроде: что не так в функции вставки, Вы получите ответ.
0
25.08.2013, 14:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.08.2013, 14:15
Помогаю со студенческими работами здесь

Разработать программу для работы с двунаправленным связными списками.
1 Разработать программы которые выполняют операции, указанные в индивидуальном задании. 2...

Реализовать следующие функции для работы с двунаправленным списком
Помогите пожалуйста написать программу. Задание: Реализовать следующие функции для работы с...

Динамические структуры данных: Реализовать функции для работы с двунаправленным списком
Реализовать следующие функции для работы с двунаправленным списком: - создание - удаление всех...

Калькулятор для основных действий
Помогите написать програму-калькулятор на С, долна уметь выполнять действия + - * / ^(степень) по...


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

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