#include<conio.h>
#include<windows.h>
#include<iostream.h>
//----------------------------------------------------
class group
{
public:
struct student
{
char group[5];
char name[20];//ïîëå ñâÿçîê
char vozrast[20];
char home[80];
student *next;
} *begin,*begin1,*rex,*end;
group();
~group();
void add(void);
void del(void);
void show(void);
void menu(void);
}g;
//----------------------------------------------------
main()
{
g.menu();
return 0;
}
//----------------------------------------------------
void group::menu(void)
{
int key=0;
begin1=begin;
do
{
cout<<"\nYou can: 1-Add member\n2-Delete every second members\n3-Show members\n\n";
key=getch();
switch(key)
{
case 49: add(); break;
case 50: del(); break;
case 51: show();
}
}
while(key!=27);
system("cls");
}
//----------------------------------------------------
void group::add(void)
{
system("cls");
rex=new student;
cout<<"group: ";cin>>rex->group;
cout<<"name: ";cin>>rex->name;
cout<<"vozrast: ";cin>>rex->vozrast;
cout<<"home: ";cin>>rex->home;
if(begin==NULL)
begin=rex;
else
end->next=rex;
end=rex;
end->next=NULL;
}
//----------------------------------------------------
void group::del(void)
{
if(begin==NULL)
{
cout<<"Empty"<<endl;
return;
}
rex=begin;
begin=begin->next;
delete rex;
}
//----------------------------------------------------
void group::show(void)
{
system("cls");
if (begin==NULL)
{
cout<<"Empty"<<endl;
return;
}
rex=begin;
while(rex!=NULL)
{
cout<<"group:"<<rex->group<<endl;
cout<<"name:"<<rex->name<<endl;
cout<<"vozrast:"<<rex->vozrast<<endl;
cout<<"home:"<<rex->home<<endl<<endl;
rex=rex->next;
}
}
//----------------------------------------------------
group::group()
{
begin=end=NULL;
}
//----------------------------------------------------
group::~group()
{
while(begin!=NULL)
{
rex=begin;
begin=begin->next;
delete rex;
}
}
С++, Списки. Дополнить программу, или подсказать.
Разработайте класс, реализующий линейный односвязный список. Методы класса: вставка элемента после n-го элемента списка, просмотр списка, удаление из списка каждого второго элемента. Поля записей: номер группы, имя ребенка, его возраст, домашний адрес.
Никак не могу 'реализовать' функции
1) Удаление каждого второго элемента.
2) Вставка после n-ного элемента.
Правда есть идеи... вот код.
Код:
По поводу идей:
1) Удаление каждого второго элемента.
пытался сделать так:
функция удаления:
Код:
if(begin1->next!=NULL)
rex=begin1->next;
else
return;
if(begin1->next->next!=NULL)
begin1=begin1->next->next;
else
return;
delete rex;
rex=begin1->next;
else
return;
if(begin1->next->next!=NULL)
begin1=begin1->next->next;
else
return;
delete rex;
при этом begin1=begin (в главной ф-ции присвоил). компилятор написал ошибку памяти, при этом дебаггером прошёлся пошагово и ошибка была в первой же строчке, работающей с указателем begin1.
Код:
if(begin1->next->next!=NULL)
begin1=begin1->next->next;
begin1=begin1->next->next;
может быть я неверно объявил? объявлял в конце структуры после } (Как и begin,end и т.п.), в main() присваивал адрес указателю begin1 в самом начале. В чём дело... до сих пор думаю.
2) Вставка после n-ного элемента. Мысль только одна - считать количество элементов и отсчитывать от последнего.
-------------------------------------------
Буду очень рад любым советам, накидаю плюсов тому, кто исправит мною данную программу и скажу огромедное спасибо. Советам тоже рад :) Просто провёл бессонную ночь над такой маленькой программой, а обидно.
PS: Использую Visual C++ 6.0
тут.Lerkin делал односвязный список.Может подчерпнешь что то полезное.
Как то делали списки
Посмотрел, но там работа с началом и концом списка, а у мне надо с внутренней частью, - каждый второй, после n'ного. Есть ещё предложения?
Код:
void group::del(void)
{
if(begin==NULL)
{
cout<<"Empty"<<endl;
return;
}
student* first = begin;
student* second = begin->next;
while (first && first->next)
{
first->next = second->next;
delete second;
first = first->next;
if (first)
second = first->next;
}
}
{
if(begin==NULL)
{
cout<<"Empty"<<endl;
return;
}
student* first = begin;
student* second = begin->next;
while (first && first->next)
{
first->next = second->next;
delete second;
first = first->next;
if (first)
second = first->next;
}
}
вставка после i-того: фором бежишь по списку на i-1 элементов. потом вставляешь элемент. для вставки элемента -- просто перебрасываешь ссылки у (i-1)-го элемента и у того, который вставляешь