#include "stdafx.h"
using namespace std;
class GroupDataSet
{
public:
int GroupNumber;
char Predmet[60];
char lessonsType[60];
int hoursNumber;
GroupDataSet* pNext;
};
GroupDataSet* pHead=0;
void addTail(GroupDataSet* pGDS)
{
pGDS -> pNext =0;
if(pHead==0)
{
pHead=pGDS;
return;
}
GroupDataSet* pCurrent=pHead;
while(pCurrent -> pNext)
{
pCurrent = pCurrent->pNext;
}
pCurrent->pNext=pGDS;
}
GroupDataSet* getData()
{
GroupDataSet* pGDS = new GroupDataSet;
cout<<"\n Input group number: ";
cin>> pGDS->GroupNumber;
if(pGDS->GroupNumber ==0)
{
delete pGDS;
return 0;
}
cout<<"\n Input lesson:";
cin>>pGDS->Predmet;
cout<<"\n Input hours number:";
cin>>pGDS->hoursNumber;
cout<<"\n Input lesson type:";
cin>>pGDS->lessonsType;
pGDS->pNext=0;
// clrscr();
system("cls");
return pGDS;
}
void displayData(GroupDataSet* pGDS)
{
cout<<" Group number: "<< pGDS->GroupNumber<<endl;
cout<<" Lesson: "<<pGDS->Predmet<<endl;
cout<<" Hours number: "<< pGDS->hoursNumber<<endl;
cout<<" Lesson type: "<< pGDS->lessonsType<<endl;
}
int main()
{
int key;
cout<<"\n For quit, input in to the field `Group number` - null"<<endl;
GroupDataSet* pGDS;
do
{
system("cls");
cout<<"\n 1-add group;"<<endl;
cout<<"\n 2-delete group;"<<endl;
cout<<"\n 3-view all groups;\n"<<endl;
cout<<"-->";
key=getch();
//getch();
cout<<endl;
//GroupDataSet* pGDS;
if(key==49)
{
while(pGDS=getData())
{
//Добавление эл-та в конец списка объектов
addTail(pGDS);
}
}
//поочередно выведем все элементы списка
//(выполнение прекратится, когда указатель
//на следующий элемент будет равен нулю)
if(key==51)
{
cout<<" Elements:"<<endl;
cout<<endl;
pGDS=pHead;
while(pGDS)
{
//отобразим текущий элемент
displayData(pGDS);
//получим адрес следующего элемента
pGDS= pGDS->pNext;
cout<<"--------------------------------"<<endl;
getch();
}
}
// clrscr();
}while(key!=27);
system("PAUSE");
return 0;
}
удаление эл-тов связаного списка
небоходимо написать программу
Цитата:
Разработайте класс, реализующий линейный односвязный список. Методы класса: вставка элемента после n-го элемента списка, просмотр списка, удаление 3-х элементов списка, начиная с n-го. Поля записей: номер учебной группы, предмет изучения, количество часов, тип проводимых занятий
а поскольку к изученью объектного програм. я начал только сегодня, я не знаю как удалить 3 эл-та списка начиная с n-го.
Все остальное вроде удалось:)
Вот что у меня получилос:
Код:
Подскажите плиз, как реализовать удаление?
На счет удаления, пролистываешь список до 3го элемента, сохрянешь все что после него во временный указатель, обнуляешь удаляешь эти три, потом соединяешь две части списка. Примерно так:
Код:
class Date
{
private:
.......................
Date *next;
public:
.......................
~Date(void);
void eraseT(void);
};
Date::~Date(void)
{
if(next!=NULL)
delete next;
}
void Date::eraseT(void)
{
Date* temp = NULL;
temp = next;
int i = 0;
for(i=0; i<2;i++)
{
if(temp->next!=NULL)
{
temp = temp->next;
}
else
{
temp = NULL;
delete next;
next = NULL;
return;
}
}
Date *prev = temp;
temp = temp->next;
prev->next = NULL;
delete next;
next = temp;
temp = NULL;
prev = NULL;
return;
}
..................................................................................
{
private:
.......................
Date *next;
public:
.......................
~Date(void);
void eraseT(void);
};
Date::~Date(void)
{
if(next!=NULL)
delete next;
}
void Date::eraseT(void)
{
Date* temp = NULL;
temp = next;
int i = 0;
for(i=0; i<2;i++)
{
if(temp->next!=NULL)
{
temp = temp->next;
}
else
{
temp = NULL;
delete next;
next = NULL;
return;
}
}
Date *prev = temp;
temp = temp->next;
prev->next = NULL;
delete next;
next = temp;
temp = NULL;
prev = NULL;
return;
}
..................................................................................
не тестировал и не отлаживал, так что все на вскидку, сам протестируешь и отладишь.
Цитата:
Разработайте класс, реализующий линейный односвязный список. Методы класса: вставка элемента после n-го элемента списка, просмотр списка, удаление 3-х элементов списка, начиная с n-го. Поля записей: номер учебной группы, предмет изучения, количество часов, тип проводимых занятий
Для того чтобы схожие темы не повторялись ежегодно,поскольку все студенты пишут из года в год списки,строки,вектора,очереди и т.д и т.п. на форуме есть FAQ,там есть ссылки на темы с кодом односвязных и двусвязных списков,и плюс еще куча всяких студенческих ежегодных задач.Пользуйся.И читай прикрепленную тему о том как пользоваться поиском по форуму.