Форум программистов, компьютерный форум 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
25.08.2013, 14:22     Разработать программу для реализации основных действий с двунаправленным динамическим списком (я правильно составила код?) #21
Цитата Сообщение от Нэко Посмотреть сообщение
скажите пожалуйста , что такое main() и куда его вставить?
Думаю, стоит начать с самых основ и программы "Hello, world". К реализации списков еще рано приступать.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.08.2013, 15:05     Разработать программу для реализации основных действий с двунаправленным динамическим списком (я правильно составила код?) #22
Цитата Сообщение от Нэко Посмотреть сообщение
скажите пожалуйста , что такое main() и куда его вставить?
Главная функция, с которой начинается работа программы. В конце вашего кода добавьте:
C++
1
2
3
4
5
6
int main()
{
    
    system("pause");
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.08.2013, 15:05     Разработать программу для реализации основных действий с двунаправленным динамическим списком (я правильно составила код?)
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
zer0mail
2188 / 1871 / 187
Регистрация: 03.07.2012
Сообщений: 6,661
Записей в блоге: 1
25.08.2013, 15:05     Разработать программу для реализации основных действий с двунаправленным динамическим списком (я правильно составила код?) #23
Цитата Сообщение от Nekto Посмотреть сообщение
Думаю, стоит начать с самых основ и программы "Hello, world". К реализации списков еще рано приступать.
Точно, типа человек пришел сдавать на права и спрашивает инструктора "а где педаль газа?".
Yandex
Объявления
25.08.2013, 15:05     Разработать программу для реализации основных действий с двунаправленным динамическим списком (я правильно составила код?)
Ответ Создать тему
Опции темы

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