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

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

Войти
Регистрация
Восстановить пароль
 
kingskeeper
7 / 7 / 1
Регистрация: 08.11.2010
Сообщений: 26
#1

Двунаправленные списки - C++

05.06.2011, 19:30. Просмотров 383. Ответов 0
Метки нет (Все метки)

Здравствуйте всем!
Написал программу для составления из одной таблицы другую. Использую двунаправленный список и классы.
Вопрос в следующем. Не работают две подпрограммы: удаление записи из таблицы и считывание из бинарного файла.
Подскажите,в чем ошибка,пожалуйста.
Заранее благодарен
PS не работает - это значит программа экстренно завершает работу.
Структуры:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
struct person
{ char fam[30];
  char im[5];
  int god;
  char mark[30];
  char strana[30];
};
struct perech
{ char mark[30];
  int ng;
};
struct node1
{ person s;
  node1 *next,*pre;
};
struct node2
{ perech g;
  node2 *next,*pre;
};
Удаление из таблицы:
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
void tabl1::Delete(int i)
{ node1 *a,*b,*c;
int j;
char ch;
if(!(i<0||i>=n+1))
 {
 for(j=0,a=beg1;j<(i-1);j++,a=a->next);
 cout<<"Are you sure that you need delete data about "<<a->s.fam<<" "<<a->s.im<<" "
     <<a->s.god<<" "<<a->s.mark<<"  (y or n)"<<endl;
cin>>ch;
if(ch=='y')
{if(a==beg1)
{
beg1=a->next;
beg1->pre=NULL;
delete a;
n--;
return;
}
if(a==end1)
{
end1=a->pre;
end1->next=NULL;
delete a;
n--;
return;
}
 
b=a->pre;
c=a->next;
delete a;
b->next=c;
c->pre=b;
n--;
}
}
else {cout<<"Out of index\n";getch();}
}
Считывание из бинарного файла:
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
int tabl2::InputFileBinPerech()
{perech t;
 fstream fin;
 char ch[60];
cout<<"Please enter root to temp Binary file\n";
cin>>ch;
fin.open(ch,ios::in|ios::binary);
if (fin.fail())
{cout<<"Binary File is not opened.";
getch();
fin.close();
return 1;
}
fin.seekg(0,ios::end);
m=fin.tellg()/sizeof(perech);
fin.seekg(0,ios::beg);
del();
for(;fin.good();)
{
fin.read((char*)&t,sizeof(perech));
if(fin.good()){new_(t);}
}
fin.close();
cout<<"Temp file is read\n";
getch();
return 0;
}
Вспомогательные подпрограммы:
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
void tabl2::del()
{
 node2 *a;
 for(a=beg2;a!=NULL;a=beg2,beg2=a->next,delete a);
 beg2=NULL;
 end2=NULL;
}
 
void tabl2::new_(perech &t)
{node2 *t_s,*t_n;
 t_n=new node2();
  if(t_n==NULL) {cout<<"Error. Overload memory data.";getch();return;}
t_s=end2;
if (t_s == NULL)
{beg2=new node2;
beg2->g=t;
beg2->next=NULL;
beg2->pre=NULL;
end2=beg2;
return;
}
t_n->g=t;
t_s->next=t_n;
t_n->pre=t_s;
t_n->next=NULL;
end2=t_n;
m++;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2011, 19:30     Двунаправленные списки
Посмотрите здесь:

C++ Двунаправленные списки
C++ C++ списки
C++ Списки в С++
списки C++
C++ Списки
Списки C++
работа со списками(двунаправленные списки) C++
двунаправленные списки С++ C++
C++ Списки
Списки C++
C++ ООП. Вложенные структуры. Двунаправленные списки
Списки двунаправленные. Удалить все нулевые элементы C++

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

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

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