Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы / SPISOK

.DOC
Скачиваний:
29
Добавлен:
30.04.2013
Размер:
28.16 Кб
Скачать

#include <iostream.h>

#include <conio.h>

class Data

{

int data;

Data* next;

public:

Data() {data=0;next=0;}

Data(int a) {data=a;next=0;}

friend class List;

};

class List

{

Data* top;

public:

List(){top=0;}

List(int);

List(List&);

~List();

Data* find (int);

void add (int);

int rem (int);

int peek (unsigned int);

void show();

int member (int);

friend List copy (List&, int);

};

List :: List (int a)

{

top=0;

Data* p=new Data(a);

top=p;

top->next=0;

}

List :: List (List& a)

{

top=0;

Data* p=a.top;

do

{

add(p->data);

p=p->next;

}

while (p!=0);

}

List :: ~List()

{

Data *p=top, *pt=p;

do

{

p=p->next;

if (pt!=0) delete pt;

pt=p;

}

while(p!=0);

top=0;

}

Data* List :: find (int a)

{

Data *r=top, *q=0;

if (a<=r->data || r==0) return q;

do

{

q=r;

r=r->next;

}

while (a>r->data && r!=0);

return q;

}

void List :: add (int a)

{

Data* q=find(a);

Data* p=new Data (a);

if(q==0)

{

if (top!=0) p->next=top;

top=p;

}

else

{

p->next=q->next;

q->next=p;

}

}

int List :: rem (int a)

{

if (top!=0)

{

if (member(a)==0) return 0;

Data* q=find(a);

Data* r;

if (q==0)

{

r=top;

top=top->next;

delete r;

return 1;

}

else

{

r=q->next;

q->next=q->next->next;

delete r;

return 1;

}

}

else return 0;

}

int List :: peek (unsigned int a)

{

if (top==0) return 0;

Data* p=top;

for(int i=0;i<a;i++)

{

p=p->next;

if(p==0) break;

}

if (p==0) return 0;

else return p->data;

}

void List :: show()

{

if (top==0) return;

Data* p=top;

cout<<"\n spisok: \n";

do {

cout<<" "<<p->data;

p=p->next;

}

while (p!=0);

cout<<endl;

}

int List:: member(int a)

{

if (top==0) return 0;

Data* p=top;

for (int i=0;p!=0;i++)

{

if (p->data==a) return 1;

p=p->next;

}

return 0;

}

List copy( List& l, int k)

{ List l2;

int a;

for (int i=0;;i++)

{

a=l.peek(i);

if (a==0) break;

if (a<k) l2.add(a);

}

return l2;

}

void main()

{

clrscr();

List s1;

s1.add(20);

s1.add(10);

s1.add(30);

s1.add(40);

s1.add(50);

s1.show();

cout<<"\n vvedite parametr k: ";

int k;

cin>>k;

List s2=copy(s1,k);

s2.show();

getch();

}

Соседние файлы в папке Лабы