Лабы / SPISOK
.DOC#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();
}
