69 lines
1.3 KiB
C++
69 lines
1.3 KiB
C++
// Die Menge wird durch ein IntList realisiert
|
|
struct IntSet {
|
|
IntList list;
|
|
} ;
|
|
|
|
// Erzeuge eine leere Menge
|
|
IntSet* empty_set ()
|
|
{
|
|
IntSet* s = new IntSet;
|
|
|
|
empty_list(&s->list);
|
|
return s;
|
|
}
|
|
|
|
// pruefe ob x in Menge ist
|
|
bool is_in_set (IntSet* s, int x)
|
|
{
|
|
for (IntListElem* p=s->list.first; p!=0; p=p->next)
|
|
if (p->value==x) return true;
|
|
return false;
|
|
}
|
|
|
|
// Fuege Element in Menge ein
|
|
void insert_in_set (IntSet* s, int x)
|
|
{
|
|
// pruefe ob Element bereits in Liste
|
|
// sonst fuege es ein
|
|
if (!is_in_set(s,x))
|
|
{
|
|
IntListElem* p = new IntListElem;
|
|
p->value = x;
|
|
insert_in_list(&s->list,0,p);
|
|
}
|
|
}
|
|
|
|
// Entferne x aus Menge
|
|
void remove_from_set (IntSet* s, int x)
|
|
{
|
|
// Hat es ueberhaupt Elemente?
|
|
if (s->list.first==0) return;
|
|
|
|
// Teste erstes Element
|
|
if (s->list.first->value==x)
|
|
{
|
|
IntListElem* p=remove_from_list(&s->list,0);
|
|
delete p;
|
|
return;
|
|
}
|
|
|
|
// Suche in Liste, teste immer Nachfolger
|
|
// des aktuellen Elementes
|
|
for (IntListElem* p=s->list.first; p->next!=0; p=p->next)
|
|
if (p->next->value==x)
|
|
{
|
|
IntListElem* q=remove_from_list(&s->list,p);
|
|
delete q;
|
|
return;
|
|
}
|
|
}
|
|
|
|
// drucke Liste
|
|
void print_set (IntSet* s)
|
|
{
|
|
print("(");
|
|
for (IntListElem* p=s->list.first; p!=0; p=p->next)
|
|
print(" ",p->value,0);
|
|
print(")");
|
|
}
|