Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Курсовая работа1 / CLASSSP
.H//
// ‘Џ€‘ЋЉ, § 票Ґ гЄ § ⥫Ґ©.
//
// і begin = S1 іend = Sn
// і і
// ЪДДДДДДДДДї ЪДДДДДДДДДї ЪДДДДДДДДДї ЪДДДДДДДДДДї
// і S1 ГДґ S2 ГДДґ S3 ГДД.....ДДДґ Sn і
// АДДДДДДДДДЩ АДДДДДДДДДЩ АДДДДДДДДДЩ АДДДДДДДДДДЩ
// і і і і
// іNext = S2; іNext = S3; іNext = S3+1; іNext = 0;
// іPrev = 0; іPrev = S1; іPrev = S2; іPrev = Sn-1;
//======================================================================
//-------=======‘’ђ“Љ’“ђЂ(®ЇЁб ЁҐ ®¤®Ј® н«Ґ¬Ґв бЇЁбЄ )====----------
//======================================================================
// Ў«® бвагЄвгал-----------------------------------------------------
typedef struct Stroka{
struct Stroka *next, *prev;
char *zapstr;
Stroka(void); //Љ®бвагЄв®а Ї® 㬮«з Ёо
Stroka(char *strk); //Љ®бвагЄв®а б Ї а ¬Ґв஬
~Stroka(void); //„ҐбвагЄв®а
}ElementSpiska;
//Љ®бвагЄв®а Ї® 㬮«з Ёо----------------------------------------------
Stroka::Stroka(void)
{
next = prev = NULL;
}
//Љ®бвагЄв®а б Ї а ¬Ґв஬----------------------------------------------
Stroka::Stroka(char *strk)
{
next = prev = NULL;
zapstr = new char(strlen(strk)+1);//+ г«Ґў®© ®Ја ЁзЁвҐ«м бва®ЄЁ
strcpy(zapstr, strk);
}
//„ҐбвагЄв®а------------------------------------------------------------
Stroka::~Stroka(void)
{
delete zapstr;
}
//======================================================================
//--==Љ‹Ђ‘‘(®ЇЁб ЁҐ ¤ўгбўп§®Ј® бЇЁбЄ Ё ®ЇҐа жЁ© ҐЈ® ®Ўа Ў®вЄЁ)====---
//======================================================================
// Ў«® Є« бб --------------------------------------------------------
class DoubleSpisok{
private:
ElementSpiska *begin, *end;
int Razmer; // ђ §¬Ґа бЇЁбЄ
public:
DoubleSpisok operator+(DoubleSpisok inp);
int operator= (DoubleSpisok inp);
DoubleSpisok operator-- (void);
void Dobavlenie(char *zapstr);
friend ostream& operator<< (ostream &stream, DoubleSpisok obj);
char* operator[](int index);
int ReadFromFile(char *fname);
DoubleSpisok(void); // Љ®бвагЄв®а Ї® 㬮«з Ёо
DoubleSpisok(int Razm); // Љ®бвагЄв®а б Ї а ¬Ґв஬
~DoubleSpisok(void); // „ҐбвагЄв®а
};
//Љ®бвагЄв®а Ї® 㬮«з Ёо----------------------------------------------
DoubleSpisok::DoubleSpisok(void)
{
begin = end = NULL;
Razmer = 0;
}
//Љ®бвагЄв®а б Ї а ¬Ґв஬ (ЇаЁЁ¬ Ґв § 票Ґ а §¬Ґа бЇЁбЄ )----------
DoubleSpisok::DoubleSpisok(int Razm)
{
begin = end = NULL;
for(int i=0; i<Razm; i++)
{
Dobavlenie("00000");
}
Razmer = Razm;
}
// „ҐбвагЄв®а-----------------------------------------------------------
DoubleSpisok::~DoubleSpisok(void)
{
/*
for( int i=0; i<Razmer; i++)
{
ElementSpiska *temp = begin;
begin = begin->next;
delete temp;
}
*/
/*
while(1)
{
ElementSpiska *temp = end;
if(begin != NULL)
{
end = end->prev;
end->next = NULL;
delete temp;
}
break;
}
*/
}
//”гЄжЁп ¤®Ў ў«ҐЁп н«Ґ¬Ґв бЇЁбЄ ------------------------------------
void DoubleSpisok::Dobavlenie(char *zap)
{
//…б«Ё бЇЁб®Є Їгбв®©
if(begin == NULL)
{
//‘®§¤ Ґ¬ ЇҐаўл© н«Ґ¬Ґв бЇЁбЄ , гЄ § ⥫Ё з «® Ё Є®Ґж а ўл
begin = new ElementSpiska(zap);
end = begin;
}
//‘ЇЁб®Є Ґ Їгбв! „®Ў ў«пҐ¬ н«Ґ¬Ґв.
else
{
//“Є § ⥫м б«Ґ¤гойЁ© н«Ґ¬Ґв бЇЁбЄ Ї®б«Ґ¤ҐЈ® н«Ґ¬Ґв ў бЇЁбЄҐ
//а ўҐ гЄ § вҐ«о ®ўл© н«Ґ¬Ґв бЇЁбЄ
// іend
// і
// ЙННННННННН» ЪДДДДДДДДДї
// є є і ЌЋ‚›‰ і
// є nextДДДДДДДДДДДДДДДДДД>і і
// ИНННННННННј АДДДДДДДДДЩ
//
end->next = new ElementSpiska(zap);
// іend<ДДДДДДДДДДДї
// і і
// ЙННННННННН» і ЪДДДДДДДДДї
// є є і і ЌЋ‚›‰ і
// є є АДДДДДДДДДДДprev і
// ИНННННННННј АДДДДДДДДДЩ
(end->next)->prev = end;
//
// ЪДДДДДД>іend
// і і
// ЙННННННННН» і ЪДДДДДДДДДї
// є є і і ЌЋ‚›‰ і
// є nextДДДДДДДДДДДДЩ і і
// ИНННННННННј АДДДДДДДДДЩ
end = end->next;
}
Razmer++;
}
//ЏҐаҐЈаг¦Ґл© ®ЇҐа в®а б㬬Ёа®ў Ёп
DoubleSpisok DoubleSpisok::operator+(DoubleSpisok inp)
{
for(int i=0; i<inp.Razmer; i++)
{
Dobavlenie(inp[i]);
}
}
//“¤ «ҐЁҐ б ¬®Ј® Їа ў®Ј® н«Ґ¬Ґв Ё§ бЇЁбЄ
DoubleSpisok DoubleSpisok::operator-- (void)
{
ElementSpiska *temp = end;
if( (begin !=NULL ))
{
end = end->prev;
end->next = NULL;
delete temp;
Razmer--;
return *this;
}
cout<<"‘ЇЁб®Є Їгбв!";
}
//ЏҐаҐЈа㦥 п ®ЇҐа жЁп ЇаЁбў Ёў Ёп
int DoubleSpisok::operator= (DoubleSpisok inp)
{
while(1)
{
if(Razmer < inp.Razmer)
{
Dobavlenie("");
}
if(Razmer > inp.Razmer)
{
(*this)--;
}
if(Razmer == inp.Razmer)
{
break;
}
}
for(int i=0; i<inp.Razmer; i++)
{
strcpy( (*this)[i], inp[i]);
}
}
//—⥨Ґ бва®Є Ё§ д ©«
int DoubleSpisok::ReadFromFile(char *fname)
{
FILE *f;
char tmp[255];
f = fopen(fname,"rt");
if(f == NULL)
{
cout << "” ©« Ґ ©¤Ґ!" << fname;
return 0;
}
while ( !feof(f) )
{
fgets(tmp, sizeof(tmp), f);
Dobavlenie(tmp);
}
fclose(f);
return 1;
}
//ЏҐаҐЈаг§Є ®ЇҐа жЁЁ Ё¤ҐЄб жЁЁ
char* DoubleSpisok::operator [] (int index)
{
if(begin != NULL)
{
ElementSpiska *temp = begin;
int i = 0;
if(index < i) return NULL;
while(1)
{
if(i == index) return temp->zapstr;
else{
i++;
if(temp->next == NULL) break;
temp = temp->next;
}
}
return NULL;
}
}
//ЏҐаҐЈаг§Є ®ЇҐа жЁЁ ўў®¤ /ўлў®¤
ostream& operator<< (ostream &stream, DoubleSpisok obj)
{
for(int i=0; i<obj.Razmer; i++)
{
stream<<obj[i];
stream<<" ";
}
}