20.09.2011, 16:36
общий
это ответ
Здравствуйте, Посетитель - 380644!
Например, так. Хотя какой смысл использовать именно структуру, не понимаю.
Создаёте заголовочный файл, например, List.h. В нём объявляем наши типы (для удобства я использую две структуры):
[code h=200]struct LElem { //Элемент списка
int info;
int year;
char author[51];
char name[101];
LElem* next; //Ссылка на следующий
};
struct CLists { //Общий класс списка
LElem* first; //Ссылка на первый
int kol; //Число элементов
CLists();
~CLists ();
void ClearList (); //Очистить список
void Vivod (); //Вывод списка
int GetBook (int x);
void ReturnBook (LElem x);
bool HasBook (int x);
};[/code]
Затем создаёте к нему в пару файл List.cpp, подключаете к нему через директиву include соответствующий заголовочный файл, и уже сюда помещаете реализацию данных функций:
[code h=200]#include "List.h"
CLists::CLists () //Конструктор
{ //Здесь обнуляем все переменные
first = NULL;
kol = 0;
}
CLists::~CLists () //Деструктор
{
ClearList (); //Очищаем список
}
void CLists::ClearList () //Очистка списка
{
LElem* b;
LElem* sp=first; //Идём по списку, освобождая память из-под каждого элемента
for (int i=1; i<=kol; i++) { b=sp; sp=sp->next; delete b;}
sp = NULL;
first = NULL;
kol = 0;
}
void CLists::Vivod () //Вывод списка на экран
{
LElem* sp = first;
cout << endl;
while (sp!=NULL) {
cout << sp->name << endl;
sp = sp->next;
}
}
void CLists::ReturnBook (LElem x) //Новый элемент в конец
{
LElem* s, *sp;
sp = first;
kol++; //наращиваем количество
s = new LElem; //Выделяем память под новый
s->info = x.info; //Запоминаем значение
strcpy (s->author, x.author);
strcpy (s->name, x.name);
s->year = x.year;
s->next = NULL;
if (sp!=NULL) { //Если элементы уже есть
while (sp->next!=NULL) sp = sp->next; //Идём в конец
sp->next = s; //Запоминаем новый элемент
} else { //Иначе запоминаем его как первый
first = s;
}
}
int CLists::GetBook (int x) //Удаление из конца
{
int er = 1; //Индикатор ошибки
LElem* s;
if (first == NULL) return er; //Если элементов нет - выходим
er = 0;
LElem* sp = first; //Идём до предпоследнего элемента
if (sp->info==x) {
first = first->next;
delete sp;
kol--;
return er;
}
while (sp->next!=NULL && sp->next->info!=x) sp = sp->next;
if (sp->next==NULL) return 1;
s = sp->next; //Запоминаем ссылку на последний
sp->next = sp->next->next; //Удаляем ссылку из списка
delete s; //Освобождаем память
s = NULL;
kol--; //Уменьшаем количество
return er;
}
bool CLists::HasBook (int x)
{
LElem* sp = first;
while (sp!=NULL) {
if (sp->info==x) return true;
sp = sp->next;
}
return false;
}
[/code]
Далее создаёте ещё один cpp-файл, в котором помещаете функцию main. В ней можете написать какой-нибудь тест для представленной структуры данных.
Будут вопросы, задавайте.
Удачи!