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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Нэко
0 / 0 / 0
Регистрация: 08.08.2012
Сообщений: 22
#1

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

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

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

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

Программная реализация выполняется в среде 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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.08.2013, 13:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разработать программу для реализации основных действий с двунаправленным динамическим списком (я правильно составила код?) (C++):

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

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

Разработать программу для реализации числ.метода парабол - C++
Доброго времени суток, мужики. С++ пытаюсь учить по примерам из учебника Культин Н.Б, а в институте задали такую задачу с которой не...

Разработать программу для создания и работы с двусвязным списком - C++
Задание: разработать программу для создания и работы с двусвязным списком , состоящим из структур. Для работы со списком создать меню со...

Работа с двунаправленным списком - C++
1)Сформировать список целых цисел 2)Вывести полученный массив 3)Поменять местами мин и макс элемент 4)Удалить из массива все...

Шифровка текста двунаправленным списком - C++
Надо написать программу для шифровки и расшифровки текстового файла, используя двунаправленный список. Зашифровать получается, а вот...

22
Нэко
0 / 0 / 0
Регистрация: 08.08.2012
Сообщений: 22
24.08.2013, 16:19  [ТС] #16
я об ошибках
0
alsav22
5421 / 4816 / 442
Регистрация: 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
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6486 / 3130 / 307
Регистрация: 04.12.2011
Сообщений: 8,644
Записей в блоге: 5
25.08.2013, 14:15 #20
Нэко, недоумение людей вполне понятно. С одной стороны, реализация линейного, двусвязного списка это не 10 строк. С другой, примеров в источниках полно. С третьей, Вы не знаете куда вставить main. Просто так и хочется ответить, что не в список!
Напишите список. И на вопрос, вроде: что не так в функции вставки, Вы получите ответ.
0
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
25.08.2013, 14:22 #21
Цитата Сообщение от Нэко Посмотреть сообщение
скажите пожалуйста , что такое main() и куда его вставить?
Думаю, стоит начать с самых основ и программы "Hello, world". К реализации списков еще рано приступать.
1
alsav22
5421 / 4816 / 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;
}
0
zer0mail
2343 / 1973 / 193
Регистрация: 03.07.2012
Сообщений: 7,090
Записей в блоге: 1
25.08.2013, 15:05 #23
Цитата Сообщение от Nekto Посмотреть сообщение
Думаю, стоит начать с самых основ и программы "Hello, world". К реализации списков еще рано приступать.
Точно, типа человек пришел сдавать на права и спрашивает инструктора "а где педаль газа?".
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.08.2013, 15:05
Привет! Вот еще темы с ответами:

Работа с двунаправленным списком и с шаблонами в С++ - C++
Здравствуйте Поомогите решить такую задачу: &quot;Используя стандартную библиотеку шаблонов STL и класс list по работе с двунаправленным...

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

Стандартная библиотека шаблонов STL и класс list по работе с двунаправленным списком - C++
здравствуйте. помогите разобраться с данной задачей. Даны натуральное число n, символы S1,S2,...,Sn. будем рассматривать слова,...

Стандартная библиотека шаблонов STL и класс list по работе с двунаправленным списком - C++
Здравствуйте. Решите пожалуйста задачу: Используя стандартную библиотеку шаблонов STL и класс list по работе с двунаправленным списком ...


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

Или воспользуйтесь поиском по форуму:
23
Yandex
Объявления
25.08.2013, 15:05
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru