Скачиваний:
43
Добавлен:
01.05.2014
Размер:
6.22 Кб
Скачать
//
//  ‘Џ€‘ЋЉ, §­ зҐ­ЁҐ гЄ § вҐ«Ґ©.
//
//  і 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<<" ";

   }
}


Соседние файлы в папке Курсовая работа1