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

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

Войти
Регистрация
Восстановить пароль
 
FloraWinx
 Аватар для FloraWinx
4 / 4 / 1
Регистрация: 05.10.2013
Сообщений: 122
#1

Связный список, потеря данных - C++

18.07.2014, 02:45. Просмотров 251. Ответов 5
Метки нет (Все метки)

Есть один список нахожу по ключу значения удаляю его из списка (все работает) , потом пытаюсь то что удалил внести в новый список и получаю ошибку
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
#include <iostream>
#include <conio.h>
using namespace std;
 
 
struct BUS
{
    int bus_number;
    char driver_surname[10];
    char driver_name[10];
    int route_number;
};
 
 
   struct NODE {   // структура узел
    BUS  route;
    BUS bus; 
    NODE *next; 
    NODE *prev; 
 };
 
 
 
   NODE *first(BUS bus);
   NODE *find(NODE *const pbeg , int i);
   bool remove(NODE**pbeg , NODE **pend, int key);
 
 
   void get_info (BUS bus , NODE *pb){   
   cout<<"Bus nubmer:"<< pb->bus.bus_number<<"\n";
   cout<<"Driver name:"<<pb->bus.driver_name<<"\n";
   cout<<"Driver surname:"<<pb->bus.driver_surname<<"\n";
   cout<<"Bus route_number:"<<pb->bus.route_number<<"\n"; }
 
BUS **fill (BUS *bus){
cout<<"Bus number:";cin>>bus->bus_number;
cout<<"Driver name:"; cin>>bus->driver_name;
cout<<"Driver surname:";cin>>bus->driver_surname;
cout<<"Bus route number:";cin>>bus->route_number;
return &bus;
 }
 
 NODE * add_first (BUS bus){
 
     NODE *pv =  new NODE;
     pv->bus=bus;
     pv->next=0;
     pv->prev=0;
     return pv;
 }
 
 
 void add(NODE **pend , BUS bus){
     fill(&bus);
 
    NODE *pv = new NODE;
    pv->bus = bus;
    pv->next=0; 
    pv->prev=*pend;
    (*pend)->next=pv;
    *pend=pv;
 }
 
void add_route (NODE **pend , NODE *pv){
    
    //NODE *pv = new NODE;
    //pv->bus = *route;
    pv->next=0; 
    pv->prev=*pend;
    (*pend)->next=pv;
    *pend=pv;
 
}
 
 
 NODE *find (NODE * const pbeg , int key) {
        NODE *pv = pbeg;
        while(pv){
            if(pv->bus.bus_number == key ) break;
                  pv = pv->next;}
        return pv;
        }
 
 bool remove (NODE ** pbeg, NODE **pend , int key){
if(NODE *pkey = find(*pbeg, key)){
    if(pkey==*pbeg) {
        *pbeg=(*pbeg)->next;
        (*pbeg)->prev= 0;}
    else if(pkey==*pend){
        *pend = (*pend)->prev;
        (*pend)->next=0;}
    else {
        (pkey->prev)->next= pkey->next;
        (pkey->next)->prev = pkey->prev;}
    delete pkey;
    return true;
    }
return false;
}
 
 
 int main(){
 
int n ;
cout<<"How much buses you want to place in your park?:";
cin>>n;
 
   BUS bus;
   fill(&bus);
   NODE *pbeg = add_first(bus);
   NODE *pend = pbeg;
   
 
 for( int i=0;i<n-1;i++){
    add(&pend ,bus);
    cout<<endl;}
 
NODE *pb = pbeg;
 
 
    system("cls");
 int l=1;
 
    while(pb){
    cout<<l<<")";
    l++;
    get_info(bus , pb);
    cout<<endl;
    pb=pb->next; }
 
 int key;
cout<<"Enter which bus you want to delete ? enter bus number"<<endl;
cin>>key;
 
NODE *Route;
NODE *pv=find(pbeg,key);
add_route( &Route,pv);
remove(&pbeg, &pend , key);
 
 
 
//if(!remove(&pbeg, &pend , key)) cout<<"Not found";
 
 
NODE *pvv = pbeg;
pv = pbeg;
while (pvv)
{
get_info(bus,pv);
pvv=pvv->next;
cout<<"--------------------"<<endl;
}   
 
 
 
 
 cout<<"Now working with route";
 
 
 
 
 
     return 0;}

думаю дело в этом но как не переписывал не могу запустить без потери данных
C++
1
2
3
4
NODE *Route;
NODE *pv=find(pbeg,key);
add_route( &Route,pv);
remove(&pbeg, &pend , key);
Добавлено через 2 минуты
ругается на эту строчку
(*pend)->next=pv;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2014, 02:45     Связный список, потеря данных
Посмотрите здесь:

C++ 2-связный список на основе 2х стэков
Связный список и вставка элемента C++
C++ Связный список, удаление
Обратный связный список C++
C++ Связный список указателей
Не удаляется 2-х связный список C++
Связный список объектов C++
Четырёх связный список C++
Наследование и связный список C++
Стек через связный список C++
Однонаправленный связный список с полями данных в самом узле списка C++
Связный список C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Хедин
 Аватар для Хедин
73 / 68 / 36
Регистрация: 17.05.2014
Сообщений: 301
18.07.2014, 09:40     Связный список, потеря данных #2
FloraWinx, эмм, вы получаете адрес найденного элемента, а потом передаете его для добавления в другой список? так ведь вы же, если я правильно понял, коверкаете элемент из оригинального списка. В таком случае лучше сделать функцию cut, которая будет возвращать адрес вырезамого из списка элемента, а соседние элементы будет связывать между собой, что бы связь не нарушить
castaway
Эксперт С++
4869 / 3008 / 370
Регистрация: 10.11.2010
Сообщений: 11,059
Записей в блоге: 10
Завершенные тесты: 1
18.07.2014, 09:51     Связный список, потеря данных #3
Какой смысл использования двойных указателей? Они только затрудняют понимание работы программы в данном случае.
FloraWinx
 Аватар для FloraWinx
4 / 4 / 1
Регистрация: 05.10.2013
Сообщений: 122
18.07.2014, 10:10  [ТС]     Связный список, потеря данных #4
функция bool remove связывает элементы просто удалить помеченный узел я спокойно могу.
Хедин
 Аватар для Хедин
73 / 68 / 36
Регистрация: 17.05.2014
Сообщений: 301
18.07.2014, 10:35     Связный список, потеря данных #5
FloraWinx, просто судя по всему у вас вначале происходит изменение элемента (то есть связность списка нарушается), а потом происходит попытка связки этого списка, но связности уже нет
AlexVRud
440 / 150 / 38
Регистрация: 04.07.2014
Сообщений: 424
18.07.2014, 17:42     Связный список, потеря данных #6
NODE *Route; не инициализированно. Далее ты в некуда переставляешь найденный элемент. При этом разрушаешь целостность списка. Ну а потом удаляешь элемент из списка. При этом у тебя в условии присваевание, что неоднозначно.
Yandex
Объявления
18.07.2014, 17:42     Связный список, потеря данных
Ответ Создать тему
Опции темы

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