Рефераты. Объектно-ориентированое програмирование на С++

Програма:

#ifndef list_h

#define list_h

class list

{

private:

struct element

{

char* info;

element* up;

element* down;

};

element *first, *last, *current;

public:

list(); //constructor

~list(); //destructor

void del_list(); //ochishchajet spisok

void init_list(int,char*); //initsializatsia spiska fonarhym metodom

void print_list(); //vyvod na ekran spiska

int current_element(int); //zdelat element s nomerom "int" tekushchim, vernetsa 0;

//Esli doidem do kontsa spiska,to vernetsa nomer poslednego elementa,kotoryi i budet tekushchim

int next_element(); //sdelat tekushchim sledujushchiy element tekuschuego

int previous_element(); //sdelat tekushchim predydushchiy element tekuschuego

int num_current(); //nomer v spiske tekushchego elementa

char* read_element(int &); //prochitat element s nomerom; Robe jogo tekushchim

char* read_element(); //prochitat tekushchiy element

void add_element(char*, int &);//dobavit element na nomer "int"; Robe novyi element tekushchim

void add_after(char*); //dobavit element posle tekushchego; Robe novyi element tekushchim

void add_before(char*); //dobavit element do tekushchego; Robe novyi element tekushchim

void del_element(); //udalit tekushchiy element; Robe sleduushchiy element tekushchim

void del_element(int &); //udalit element z nomerom "int"; Robe sleduushchiy element tekushchim

int fput_list(char*); //zapisat spisok v fail s imenem char*

int fget_list(char*); //vostanovit spisok iz faila s imenem char*

int num_list(); //kol-vo zvenjev u spiska

};

#endif

#ifndef list__h

#define list__h

#include "list.h"

#include <iostream.h>

list::list()

{

current=last=first=NULL;

};

void list::add_after(char* s)

{

if (current==NULL)

{

current=new element[1];

current->info=new char[strlen(s)+1];

strcpy(current->info,s);

current->up=current->down=NULL;

first=last=current;

return;

};

if (current==last)

{

last=new element[1];

last->info=new char[strlen(s)+1];

strcpy(last->info,s);

last->down=NULL;

last->up=current;

current->down=last;

current=last;

return;

};

//put in buffer adress down

last->down=current->down;

current->down=new element[1];

current->down->up=current;

current=current->down;

current->down=last->down;

//clear buffer

last->down->up=current;

last->down=NULL;

current->info=new char[strlen(s)+1];

strcpy(current->info,s);

return;

};

void list::add_before(char* s)

{

if (current==NULL)

{

add_after(s);

return;

};

if (current==first)

{

first=new element[1];

first->up=NULL;

first->down=current;

current=current->up=first;

first->info=new char[strlen(s)+1];

strcpy(first->info,s);

return;

};

first->up=current->up;

current->up=new element[1];

current->up->down=current;

current=current->up;

current->up=first->up;

first->up->down=current;

first->up=NULL;

current->info=new char[strlen(s)+1];

strcpy(current->info,s);

return;

};

void list::add_element(char* s, int &k)

{

int i;

i=current_element(k);

if ((i<k)&&(i!=0))

{

cout<<"V spiske vsego "<<i<<" elmentov. Po etomu vmesto "<<k<<" nomera, functsia dobavit info elementa na "<<i+1<<"-e mesto(poslednee v spiske)!!!\n";

k=i+1;

add_after(s);

};

if(i==0)

add_before(s);

return;

};

void list::del_element()

{

if (first==NULL)

{

cout<<"Nemogu udalit element so spiska. Spisok pust.\n";

return;

};

if (current==first)

{

if (current==last)

{first=last=NULL;}

else

{

first=current->down;

first->up=NULL;

};

delete[]current->info;

delete[]current;

current=first;

return;

};

if (current==last)

{

last=current->up;

last->down=NULL;

delete[]current->info;

delete[]current;

current=last;

return;

};

last->down=current->down;

current->up->down=current->down;

current->down->up=current->up;

delete[]current->info;

delete[]current;

current=last->down;

last->down=NULL;

return;

};

void list::del_element(int &k)

{

int i=current_element(k);

if ((i<k)&&(i!=0))

{

cout<<"V spiske vsego "<<i<<" elmentov. Po etomu vmesto "<<k<<" elementa, functsia udalit "<<i<<" element!!!\n";

k=i;

};

del_element();

return;

};

list::~list()

{

del_list();

};

void list::del_list()

{

while (last!=first)

{

current=last;

delete [] last->info;

last=last->up;

delete [] current;

};

if (first) delete [] first->info;

delete[]first;

current=first=last=NULL;

return;

};

//current ostaetsa netronutym

int list::num_list()

{

if(first==NULL) return 0;

int i(1);

element* temp=first->down;

while (temp!=NULL)

{

i++;

temp=temp->down;

};

return i;

};

//if OK return 0, esle return i (number current element)

int list::current_element(int k)

{

if (first==NULL)

{

cout<<"V spiske 0 elementov.\n";

return 0;

};

int i(1);

current=first;

if(i==k) return 0;

while (current->down)

{

current=current->down;

if (++i==k) return 0;

};

return i;

};

//Esli sled. element sdelalsa tekuschim return 1, else 0

int list::next_element()

{

if (current->down)

{

current=current->down;

return 1;

};

return 0;

};

//Esli pred. element sdelalsa tekuschim return 1, else 0

int list::previous_element()

{

if (current->up)

{

current=current->up;

return 1;

};

return 0;

};

int list::num_current()

{

if(current==NULL)return 0;

int i(1);

element* temp=current;

while (temp->up!=NULL)

{

i++;

temp=temp->up;

};

return i;

};

char* list::read_element()

{

Страницы: 1, 2, 3, 4



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.