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