Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Darya2512
0 / 0 / 1
Регистрация: 27.04.2016
Сообщений: 2
#1

Реализовать удаление элемента из пользовательского класса "Двунаправленный список" - C++

10.10.2016, 22:47. Просмотров 177. Ответов 1
Метки нет (Все метки)

Программа для работы с двунаправленным списком.
Пользователь вводит список с клавиатуры, программа должна выводить его в обоих направлениях, удалять первый/последний элемент и выводить измененный список также в обоих направлениях.
Всё работает, но есть одно но: когда удаляю первый элемент, и после этого хочу вывести список в обратном порядке, он выводит его без удаления (то есть исходный список). В чём проблема?
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
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <ctime>
#include <Windows.h>
#include <WinBase.h>
 
 
using namespace std;
 
struct list
{
    int  Inf;
    list * n,
         * p;
         
 
};
 
int main ()
{
    setlocale(0,"");
    //cоздание списка
    int k; //необходимое кол-во ячеек
    list *c, *allo, *del, *begin, *ab, *Curr, *next=0;
    int dn;
    long long t=0;
    
 
    cout<<"Сколько ячеек создать?"<< endl;
    cin>>k;
    cout<<"Заполнить случайными числами? Да- нажмите 1, нет-нажмите 0"<<endl;
    cin>>dn;
    
    for ( int i = 1; i <= k; ++ i )
    {
        
        allo = new list;
    
        allo->n = next; 
        if  ( next )  
            {
                next->p=allo;}
 
    allo->p = 0;
        next = allo;
    
 
    c=allo;//запомнили первый элемент списка
    }
 
    
    if (dn==1)
    { t=GetTickCount64(); 
        for (int i=1; i<=k; ++i) 
        {
            //cout<<"Введите значение"<<endl;
            allo->Inf=rand();
            cout<<endl;
            allo=allo->n; //переход к следующему
            
        }
t= GetTickCount64()-t; 
          cout << "Время работы создания списка в программе равно " <<t<< endl;
          system ("pause");
    }
 
    
    int s;
    while (int l=1)
    {
        system("cls");
    cout<<"Введите:"<<endl<<"1-записать список"<<endl<<"2- удалить первый элемент элемент"<<endl<<"3-удалить последний элемент"<<endl<< "4-просмотреть список"<<endl<<"5-просмотреть список в обратном порядке"<<endl<<"6-выход"<< endl;
    cin>>s;
 
if (s == 1) //записываем список
    { 
        for (int i=1; i<=k; ++i) 
        {
            cout<<"Введите значение"<<endl;
            cin>>allo->Inf;
            cout<<endl;
            allo=allo->n; //переход к следующему
        }
 
    }
 
   
 
    if (s == 2) //удаление первого элемента
    {
        allo=c;
        ab=allo->n;
        c=ab;
        k--;
    }
 
    if (s == 3) //удаление последнего элемента
    {
    allo=c;
    for (int i=1; i<(k-1); ++i)
        allo=allo->n;
    allo->n=NULL;
    k--;
    }
 
     if (s==4) // просмотр списка
    {
        
        
        allo=c;
        while (allo != 0)
        {
            cout <<allo->Inf<<"\t";
            allo=allo->n;
        }
system ("pause");
    
    }
 
 
 if (s == 5)
 {
     allo=c;
     while ((allo->n) != NULL)
         allo=allo->n;
     do {
         cout<<allo->Inf<<'\t';
         allo=allo->p;
     }
     while ( allo != NULL);
     system ("pause");
 }
 
 if (s == 6)
     {
         return 0;
     }
 
}
 
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2016, 22:47
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Реализовать удаление элемента из пользовательского класса "Двунаправленный список" (C++):

Реализовать пользовательский класс "Двунаправленный список"; реализовать добавление и удаление элементов
Записи в линейном списке содержат ключевое поле типа *char(строка символов). ...

Реализовать указанные функции-члены для пользовательского класса "Кольцевой двусвязный список"
Сообственно сабж. У списка два закрытых поля: tail-это узел следующий за...

На основе заданных прототипов реализовать функции-члены для пользовательского класса "Односвязный список"
Извиняюсь,забыла принт опреедлить Преподаватель дал прототипы функций ,которые...

Написать конструктор для пользовательского класса "Двусвязный список"
Попытался построить двусвязный список. Как написать этот конструктор ? Может...

Обработка пользовательского класса "Односвязный линейный список"
Доброго времени суток. Хочу написать программу для обработки односвязного...

Реализовать класс "Список"; реализовать добавление и удаление элементов
помогите написать код по спискам. надо создать линейный односвязный...

1
fire_Rising
10 / 11 / 7
Регистрация: 11.05.2016
Сообщений: 113
10.10.2016, 23:19 #2
Darya2512,
Зачем это делать?
C++
1
c=allo;//запомнили первый элемент списка
Когда есть
C++
1
list *begin;
Проще заполнять список так:
C++
1
2
3
4
//Сначала до заполнения обнуляете два указателя(на начало и конец) и приравниваете значения конца началу
list *begin = NULL, *end = NULL;
end = begin;
//Далее выделяете память каждый раз и при заполнении сдвигаете только конец *end
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2016, 23:19
Привет! Вот еще темы с решениями:

Удаление элемента из вектора пользовательского класса
Помогите, пожалуйста. Не могут понять, что я упускаю. При удалении элемента из...

Реализовать поиск в массиве объектов пользовательского типа (структура "Маршруты")
Здравствуйте, нужна помощь, нужно доработать код, но не совсем понимаю как Вот...

Реализовать перегрузку операторов сравнения для пользовательского типа "Обыкновенная дробь"
Структура. дробное сравнение 1. Создайте структуру дробей, состоящую из...

Создать объект типа "связаный двунаправленный список", с перегруженными унарными операциями
Помогите, пожалуйста, с задачей! Создать объект типа &quot;связаный двунаправленный...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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