Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //стр.55-58 - Однонаправленный список общего вида - РОЗОВАЯ
- #include "exception.cpp"
- template <class Item>
- class List
- {
- struct Element
- {
- Item inf;
- Element *next;
- Element (Item x):inf(x),next(0)
- {
- }
- };
- Element *head; //указатель на начало списка
- int size; //количество элементов в списке
- //возвращает указатель на элемент списка с номером index
- Element *Find(int index)
- {
- if ((index<1)||(index>size)) //если индекс элемента списка находится вне диапазона, то возвращаем NULL
- {
- return NULL;
- }
- else //иначе устанавливаем указатель на начало списка
- {
- Element *cur=head;
- for (int i=1; i<index; i++) //и перемещаемся по списку на элемент с номером index
- {
- cur=cur->next;
- }
- return cur; //возвращаем указатель на требуемый элемент
- }
- }
- public:
- List():head(0),size(0) //конструктор класса
- {
- }
- ~List() //деструктор класса
- {
- while (!Empty())//пока список не пуст
- {
- Remove(1); //удаляем первый элемент списка
- }
- }
- bool Empty)_ //проверка пустоты списка
- {
- return head==0;
- }
- int GetLength() //возвращает количество элементов в списке
- {
- return size;
- }
- //возвращает значение элемента списка по его номеру
- Item Get(int index)
- {
- if ((index<1)||(index>size))
- {
- throw ListException ("ListException: get - list error");
- }
- else
- {
- Element *r=Find(index);
- Item i=r->inf;
- return i;
- }
- }
- //осуществляет вставку элемента со значением data в позицию index
- void Insert (int index, Item data)
- {
- if ((index<1)||(index>size+1))
- {
- throw List Exception ("ListException: insert - list error");
- }
- else
- {
- //создаём новый элемент
- Element *newPtr=new Element (data);
- size=GetLength()+1; //увеличиваем размерность списка
- if (index==1) //если вставку производим в позицию 1
- { //то см. рис. 5.6 на стр. 59 - РОЗОВАЯ
- newPrt->next=head;
- head=newPtr;
- }
- else //иначе см. рис. 5.7
- {
- Element *prev=Find(index-1);
- newPtr->next=prev->next;
- prev->next=newPtr;
- }
- }
- } //осуществляет удаление элемента из списка с номером index
- void Remove (int index)
- {
- if ((index<1)||(index>size))
- {
- throw ListException ("ListException: remove - list error");
- }
- else
- Element *cur; //объявляем вспомогательный указатель
- -- size; //уменьшаем размерность списка
- if (index==1) //если удаляем первый элемент
- { //то см. рис. 5.8
- cur=head;
- head=head->next;
- }
- else // иначе см. рис. 5.9
- {
- Element *prev=Find(index-1);
- cur=prev->next;
- prev->next=cur->next;
- }
- cur->next=NULL;
- delete cur;
- }
- }
- //вывод элементов списка в глобальный поток out
- void Print()
- {
- for (Element *cur = head; cur!=NULL; cur=cur->next)
- {
- out<<cur->inf<<' ';
- }
- out<<endl;
- }
- };
- /* Замечание: Класс Exception помещён в отдельный файл exception.cpp и выглядит следующим образом:
- #include "exception"
- #include "string"
- using namespace std;
- class ListException: public exception
- {
- public:
- LustException(const string & message=""): exception(message.c_str())
- {
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement