
-
Реализация
#include <conio.h>
#include <stdlib.h>
#include <iostream.h>
#include <math.h>
#include <bios.h>
#include <iomanip.h>
struct List
{
int info;
List *prev,*next;
};
class TTurn //Базовый класс «Очередь»
{
protected :
List *head,*p,*tail;
public :
TTurn (); //Конструктор
void Clear (); //Очистка
int Length (); //Определение длины
void Write (); //Вывод на экран
void Delete (); //Удаление одного элемента
int Take (); //Доступ к элементу
};
class TLifo : public TTurn //Класс «LIFO»
{
public :
TLifo ();
void operator + (int k); //Добавление элемента
};
class TFifo : public TTurn //Класс «FIFO»
{
public :
TFifo ();
void operator + (int k); //Добавление элемента
};
/***********************************/
TTurn::TTurn () //Конструктор (создает пустую очередь)
{
head=new List;
tail=new List;
head->info=NULL;
tail->info=NULL;
head->next=tail;
tail->prev=head;
p=head;
};
void TTurn::Clear ()
{
List *q;
p=tail->prev;
while (p->info!=NULL)
{
p=tail->prev;
q=p;
p->prev->next=tail;
tail->prev=p->prev;
p=p->prev;
delete q;
}
};
int TTurn::Length ()
{
p=head->next;
int k=0;
while (p->info!=NULL)
{
p=p->next;
k++;
}
return (k);
}
void TTurn::Write ()
{
cout << "‘®бв®пЁҐ:" << endl;
p=head->next;
while (p->info!=NULL)
{
cout << setw(8) << p->info;
p=p->next;
}
cout << endl;
return;
};
void TTurn::Delete ()
{
List *q;
p=head->next;
q=p;
p->next->prev=head;
head->next=p->next;
p=p->next;
delete q;
};
int TTurn::Take ()
{
p=head->next;
int i;
i=p->info;
return (i);
}
/*************************************/
TLifo::TLifo ()
{
head=new List;
tail=new List;
head->info=NULL;
tail->info=NULL;
head->next=tail;
tail->prev=head;
p=head;
};
void TLifo::operator + (int k) //Добавление элемента в начало
{
p=new List;
p->info=k;
p->prev=head;
p->next=head->next;
head->next->prev=p;
head->next=p;
return;
};
/***************************************/
TFifo::TFifo () //Конструктор
{
head=new List;
tail=new List;
head->info=NULL;
tail->info=NULL;
head->next=tail;
tail->prev=head;
p=head;
};
void TFifo::operator + (int k) // Добавление элемента в конец
{
p=new List;
p->info=k;
p->next=tail;
p->prev=tail->prev;
tail->prev->next=p;
tail->prev=p;
return;
};
/***************************************/
void main () //Главная функция
{
clrscr();
TLifo head1;
TFifo head2;
cout<<"START "<<"-"<<" FINISH"<<endl;
cout << "Работа LIFO:" << endl;
head1+1;
head1+2;
head1+3;
cout <<"Создание:"<<endl;
head1.Write();
int i=head1.Length();
cout << endl << "Определение длины:" << endl << i << endl;
cout << "Удаление одного элемента:" << endl;
head1.Delete();
head1.Write();
cout << "Доступ к элементу:" << endl;
i=head1.Take();
cout << i << endl;
cout << "Очистка:" << endl;
head1.Clear();
head1.Write();
cout<<"Работа FIFO:"<<endl;
head2+1;
head2+2;
head2+3;
head2+4;
cout <<"Создание:"<<endl;
head2.Write();
i=head2.Length();
cout << endl << "Определение длины:" << endl << i << endl;
cout << "Удаление одного элемента:" << endl;
head2.Delete();
head2.Write();
cout << "Доступ к элементу:" << endl;
i=head2.Take();
cout << i << endl;
cout << "Очистка:" << endl;
head2.Clear();
head2.Write();
}