Создать множество по принципу стека,перегрузить операторы объединения,пересечения и дополнения множеств.не компилирует..
Код:
#include <conio.h>
#include <stdio.h>
# include <iostream>
using namespace std;
class set
{
class element
{
public:
const int a;
element *next;
element(int _a):a(_a), next(NULL) { }
} *e;
int count;
public:
set():e(NULL), count(0) { }
~set()
{
element *temp;
while (e != NULL)
{
temp = e;
e = e->next;
delete temp;
}
count = 0;
}
void set::add(int b)
{
element*i=e;
if(!i)
{
i=new element(b);
count++;
return;
}
if (b>=i->a)
{
if (i->a==b) return;
else
{
while (!(i->next==NULL)&&(b>=i->next->a))
i=i->next;
element*temp=new element(b);
temp->next=i->next;
i->next=temp;
count++;
return;
}
}
else
{
element*temp=new element(b);
temp->next=e;
e=temp;
return;
}
}
void draw()
{
element *temp=e;
while(e!=NULL)
{
cout<<e->a;
e=e->next;
}
e=temp;
cout<<"колличество:"<<count;
}
void set::del(int a)//удаление
{
element * temp = new element (a);
element * t = new element (a);
t=e;//доп.переменную
temp=e->next;
if (e->a==a) {e=e->next; return;}//по всему списку идем и удаляем
while (temp)
{
if (temp->a==a)
{
t->next=temp->next;
delete temp;
return;
}
temp=temp->next;
t=t->next;
}
}
set*set::operator && (const set B)
{
set C;
element*ia=this->e;
element*ib=B.e;
while (ia!=NULL)
{
while (ib!=NULL)
{
if(ia->a==ib->a)
{
C.add(ia->a);
ia=ia->next;
}
else
{
if (ia->a>ib->a)
ib=ib->next;
else
ia=ia->next;
}
}
}
}
set*set::operator || (const set B)
{
set D;
element*ia=this->e;
element*ib=B.e;
while (ia!=NULL)
{
while (ib!=NULL)
{
if(ia->a==ib->a)
{
D.add(ia->a);
ia=ia->next;
}
else
ia=ia->next;
}
}
}
set * operator / (const set B)
{
element*ia=this->e;
element*ib=B.e;
while (ia!=NULL)
{\
while (ib!=NULL)
{
if(ia->a==ib->a)
while (e)
{
this->del.set(e->a);
e=e->next;
}
}
}
}
};
void main()
{
setlocale(LC_ALL, "Russian");
set A,B,C;
int a;
a=1;
cout<<"введите первое множество"<<"\n";
while (a)
{
cin>>a;
A.add(a);
}
a=1;
cout<<"введите второе множество"<<"\n";
while(a)
{
cin>>a;
B.add(a);
}
cout<<"\n-----------------\n";
A.draw();
cout<<"\n-----------------\n";
B.draw();
set *C=A&&B;
cout<<"объединение(&&)";
C.draw();
set *C=A||B;
cout<<"пересечение(||)";
C.draw();
set *C=A/B;
cout<<"дополнение(/)";
C.draw();
getch();
}