aleksHL
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору #pragma hdrstop #include <iostream.h> #include <conio.h> #include <string.h> #include <stdlib.h> string rus(char s[]) // перевод кодировки Windows в Dos { string t; int i=0; t=s; while (t[i]!=0) { if(t[i]>='а'&& t[i]<='п' ) t[i]-=64; if(t[i]>='р'&& t[i]<='я' ) t[i]-=16; i++; } return t; } #pragma argsused struct book { char avtor[20]; char name[20]; int year; }; struct element { book info; element* next; element* prev; }; void add (element*& begin, element*& end, book t); void del (element*& begin, element*& end, book t); void copy (element* begin, element* end); void print_right_element (element* begin, element* end); void print (element* begin); int main(int argc, char* argv[]) { element* begin = NULL; //начало element* end = NULL; //конец int p;//выбор пункта меню char avtor[20]; char name[20]; int year; book t; do { clrscr(); cout<<rus("1. добавление в конец")<<endl; cout<<rus("2. удаление первого")<<endl; cout<<rus("3. копирование дека в обратном порядке")<<endl; cout<<rus("4. получение значения правого элемента")<<endl; cout<<rus("5. вывод дека")<<endl; cout<<endl<<rus("6. выход")<<endl; cout<<endl<<endl; cout<<rus("укажите пункт меню: "); cin>>p; cout<<endl; switch (p) { case 1: cout<<rus("автор: "); cin.getline(t.avtor,20); cin.getline(t.avtor,20); cout<<rus("название: "); cin.getline(t.name,20); cout<<rus("год: "); cin>>t.year; add(begin,end,t); break; case 2: del(begin,end,t); break; case 3: copy(begin,end); getch(); break; case 4: print_right_element(begin, end); getch(); break; case 5: print(begin); getch(); break; case 6: return 0; } } while(true); } void add (element*& begin, element*& end, book t) { element* p = new element; p->info = t; //если дек пуст, то... if (end == NULL) { begin = p; p->next = p->prev = NULL; end = p; } else { p->next = NULL; p->prev = end; end->next = p; end = p; } } void del (element*& begin, element*& end, book t) { if (begin->next != NULL) { element* p = begin; p->info = t; begin = begin->next; begin->prev = NULL; delete p; } //если в деке один элемент else { element* p = begin; p->info = t; begin = end = NULL; delete p; cout<<rus("дек пуст"); getch(); } } //---------------------------------------------------------------------------------------------------------- void copy (element&* begin, element&* end) { element* p = begin; while(p != 0) { element *prev = p->prev; element *next = p->next; p->prev = next; p->next = prev; p = next; } p = begin; begin = end; end = p; } //---------------------------------------------------------------------------------------------------------- void print_right_element (element* begin, element* end) { element* p = end; cout<<p->info.avtor<<" "<<p->info.name<<" "<<p->info.year<<" "<<endl; } void print (element* begin) { element* p = begin; while (p!=0) { cout<<p->info.avtor<<" "<<p->info.name<<" "<<p->info.year<<" "<<endl; p=p->next; } if (begin==0) cout<<rus("дек пуст"); } | Всего записей: 17 | Зарегистр. 06-03-2006 | Отправлено: 23:58 09-12-2006 | Исправлено: aleksHL, 18:09 10-12-2006 |
|