| Код | lement* add_prev(list &lst, const book &b) { element *t = new element; t->info = b; t->prev = 0; t->next = lst.first ; lst.first = t; return t; } element* add_next(list &lst, const book &b) { element *t = new element; t->info = b; t->prev = lst.last; t->next = 0; lst.last = t; return t; } element* insert_after(list &lst, element *pos, const book &b) //вставляет новый элемент за элементом pos в списке lst { element *t = new element; t->info = b; t->prev = pos; t->next = pos->next; pos->next = t; if ( !t->next ) //если pos был последним элементом списка (скорее всего) lst.last = t; //то обновляем поле last списка return t; } element* insert_before(list &lst, element *pos, const book &b) //вставляет новый элемент перед элементом pos в списке lst { element *t = new element; t->info = b; t->prev = pos->prev; t->next = pos; pos->prev = t; if ( !t->prev ) //если pos был первым элементом списка (скорее всего) lst.first = t; //то обновляем поле first списка return t; } void clear_list(list &lst) //можно сделать в виде деструктора класса list { for(element *t1 = lst.first, *t2; t1; t1 = t2) { t2 = t1->next; delete t1; } lst.first = 0; lst.last = 0; }
void print(list &lst) { for(element *t1 = lst.first, *t2; t1; t1 = t2) { t2 = t1->next; cout <<"Author: "<< t1->info.author <<"; "; cout <<"Title: "<< t1->info.title <<"; "; cout <<"Year: "<< t1->info.year <<"; "<<endl; }
void main(){
list lst; book b;
bool OK; int p1;
do { clrscr();
cout<<"1.Vvod knigi sleva"<<endl; cout<<"2.Vvod knigi sprava"<<endl; cout<<"3.Print list"<<endl<<endl; cout<<"4.Exit"<<endl<<endl; cout<<"Select option "; cin>>p1;
element *p; p = new element;
switch (p1) { case 1:
cout<<"Add book sleva"<<endl; cout<<"Author: "; cin.get(); cin.getline(b.author,20); cout<<"Title: "; cin.get(); cin.getline(b.title,20); cout<<"Year: "; cin>>b.year; p=add_prev(lst, b); cout<<"Vipolneno uspeshno"<<endl; break;
case 2:
cout<<"Add book sprava"<<endl; cout<<"Author: "; cin.get(); cin.getline(b.author,20); cout<<"Title: "; cin.get(); cin.getline(b.title,20); cout<<"Year: "; cin>>b.year; p=add_next(lst, b); cout<<"Vipolneno uspeshno"<<endl; break;
case 3:
cout<<"Prosmotr knig"<<endl; print(lst); break; } getch(); } while(p1!=4); }
|
Не работает add_next. Так же не совсем понял как при insert_before и insert_after установить указатель на последний элемент к примеру. И правильно ли я функцию принт сделал? |