Files
uni/ws2019/ipi/uebungen/cpp_headers/intset.cc
T

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(")");
}