Необходимо реализовать список вида:
Техническое описание программы.
В программе предусмотрена работа со списком, которая включает в себя:
Создание нового вписка;
Добавление элемента в список;
Вывод списка на дисплей;
Сохранение данных списка в файл;
Чтение данных из файла;
Удаление списка из памяти компьютера;
Поиск элемента в списке;
Сортировка списка;
Удаление элемента списка.
Спецификация программы.
Ввод данных в программу может осуществляться двумя способами: ввод с клавиатуры или из файла.
Для работы с файлом необходимо на соответствующий запрос программы ввести имя файла, из которого будут взяты данные для построения списка.
Для нормальной работы программы требуется PC совместимый компьютер и компилятор Borland 3.01 и выше. При использование иного сочетая характеристик системы на которой будет тестироваться программа возможны некоторые расхождения с результатами теста, но в основном ничего страшного произойти не должно.
Текст программы.
#include <iostream.h>
#include <fstream.h>
class List
{struct Tree
{int Body;
Tree *LP;
Tree *RP;
Tree(int Bdy=0) {Body=Bdy; LP=NULL; RP=NULL;}
~Tree() {Body=0; LP=NULL; RP=NULL;}
};
public:
List(int Digit=0);
Tree *Root;
List *LNext;
List *LPrev;
List::List(int Digit)
{Root=NULL;
for (int i=Digit*10; i<Digit*10+10; i++)
{Tree *PTree;
PTree=new Tree(i);
PTree->LP=NULL;
PTree->RP=NULL;
if (Root==NULL)
Root=PTree;
else
{Tree *PTree1=Root;
do
{if (PTree1->LP!=NULL)
PTree1=PTree1->LP;}
while (PTree1->LP!=NULL);
PTree1->LP=PTree;
PTree=NULL; PTree1=NULL;
}
class TreeWork : private List
{public:
void TreeWorkStart();
private:
int ElementQuantity;
int Mass;
int i;
List *BegP;
List *PList;
int MainMenu();
int Work(int Task);
int MakeNewList();
int AddElements();
int PrintList();
void EraseList();
int DeleteElement();
int FindElement();
int SubMenu();
int SubWork(int Task);
int SortByIncrease();
int SortByDecrease();
int SaveList();
int OpenList();
protected:
void GoThroughTree(Tree *L);
void Erase(Tree *L);
int TreeWork::MainMenu()
cout<<" 1. Make New List." <<endl;
int TreeWork::SubMenu()
int TreeWork::SubWork(int Task)
{switch (Task)
{case 1 : SortByIncrease(); break; //Increase
case 2 : SortByDecrease(); break; //Decrease
return 0;
int TreeWork::Work(int Task)
{case 1 : ElementQuantity=MakeNewList(); break; //Make New List
case 2 : ElementQuantity+=AddElements(); break; //Add Element
case 3 : PrintList(); break; //Print List
case 4 : DeleteElement(); break; //Delete Element
case 5 : SaveList(); break; //Save List
case 6 : ElementQuantity=0; EraseList(); break; //Erase List
case 7 : OpenList(); break; //Open File
case 8 : FindElement(); break; //Find Element
case 9 : SubWork(SubMenu()); break; //Sort List
case 0 : EraseList(); return -1; //Exit
void TreeWork::TreeWorkStart()
{ElementQuantity=0;
do {} while (Work(MainMenu())!=-1);
int TreeWork::MakeNewList()
{if (BegP!=NULL)
{cout<<endl<<"You have existing list!"; return 0;}
int Quant;
cout<<endl<<"Input quantity of elements: ";
{cin>>Quant;
if (Quant<1)
cout<<endl<<"Error! Try againt: ";
while (Quant<1);
for (int i=0; i<Quant; i++)
{cout<<endl<<"Input digit: ";
int Digit; cin>>Digit;
PList=new List(Digit);
if (BegP==NULL)
{BegP=PList;
BegP->LNext=BegP;
BegP->LPrev=BegP;
PList=NULL;}
{List *PList1=BegP->LPrev;
if (PList1==BegP)
{BegP->LNext=PList;
BegP->LPrev=PList;
PList->LNext=BegP;
PList->LPrev=BegP;
PList=NULL; PList1=NULL;}
{BegP->LPrev=PList;
PList1->LNext=PList;
PList->LPrev=PList1;
return Quant;
int TreeWork::AddElements()
{if (BegP==NULL)
{MakeNewList(); return 0;}
cout<<endl<<"Error! Try again: ";
int Digit;
cin>>Digit;
List *PList1=BegP->LPrev;
PList1=NULL; PList=NULL;}
int TreeWork::PrintList()
{cout<<endl<<"The list is empty!"<<endl; return -1;}
cout<<endl<<"Total elements: "<<ElementQuantity<<endl;
PList=BegP;
int i=1;
{cout<<endl<<" "<<i<<" element: "<<endl;
GoThroughTree(PList->Root);
cout<<endl;
i++;
PList=PList->LNext;}
while (PList!=BegP);
void TreeWork::GoThroughTree(Tree *L)
{Tree *PL=L, *PL1;
if (PL->LP!=NULL)
{PL1=PL;
PL=PL->LP;
cout<<"("<<PL1->Body<<","<<PL->Body<<") ";
GoThroughTree(PL);}
if (PL->RP!=NULL)
PL=PL->RP;
void TreeWork::Erase(Tree *L)
{Tree *PL=L;
{PL=PL->LP;
Erase(PL);}
{PL=PL->RP;
PL->LP=NULL;
PL->RP=NULL;
void TreeWork::EraseList()
{do
{List *PList1=BegP->LNext;
PList=PList1->LNext;
BegP->LNext=PList;
Erase(PList1->Root);
delete [] PList1;
BegP=NULL; PList=NULL;
int TreeWork::DeleteElement()
{cout<<endl<<"Input number of element: ";
int Number=0;
cin>>Number;
if (Number>ElementQuantity || Number<0)
{cout<<endl<<"Error!"; return -1;}
Number--;
for (int i=0; i<Number; i++)
PList=PList->LNext;
List *PList1=PList->LNext, *PList2=PList->LPrev;
if (PList==BegP)
{PList1->LPrev=PList2;
PList2->LNext=PList1;
PList->LNext=NULL;
PList->LPrev=NULL;
delete [] PList;
BegP=PList1;
PList1=NULL; PList2=NULL;}
ElementQuantity--;
int TreeWork::FindElement()
{cout<<endl<<"Input number, you want to find: ";
{Tree *PT=PList->Root;
if (Number>PT->Body && Number<PT->Body+10)
{cout<<endl<<"Element with this number: "<<endl;
PList=NULL; cout<<endl; return 0;}
cout<<endl<<"There aren't such number in list!"<<endl;
PList=NULL;
return -1;
int TreeWork::SortByIncrease()
{
if(BegP==NULL) {cout<<endl<<"Error!"<<endl; return -1;}
List *PList1=BegP; PList=BegP;
{if (PList1->Root->Body>PList->Root->Body)
{Tree *PT;
PT=PList1->Root;
PList1->Root=PList->Root;
PList->Root=PT;
PT=NULL;}
PList1=PList1->LNext;
while (PList1!=BegP);
int TreeWork::SortByDecrease()
{if (PList1->Root->Body<PList->Root->Body)
int TreeWork::SaveList()
ofstream F;
char *FileName=new char[25];
cout<<endl<<"Input file name: "; cin>>FileName;
F.open(FileName);
{i=0;
Mass=PList->Root->Body;
if (PList!=BegP)
F<<Mass<<endl;
F<<Mass;
F.close();
delete [] FileName;
int TreeWork::OpenList()
{cout<<endl<<"The list is alredy exist!"<<endl; return -1;}
cout<<endl<<"Input file name: ";
cin>>FileName;
ifstream f;
ElementQuantity=0;
f.open(FileName);
char Next;
Next=f.peek();
while (Next!=EOF)
f>>Mass;
PList=new List(Mass/10);
ElementQuantity++;
f.close();
TreeWork TW;
void main()
{TW.TreeWorkStart();}
Результаты работы программы.
Начало работы:
Main Menu:
1. Make New List.
2. Add Element.
3. Print List.
4. Delete Element.
5. Save List.
6. Erase List.
7. Open File.
8. Find Element.
9. Sort List.
0. Exit.
Your choice :