Für Vorlesungen, bitte die Webseite verwenden. https://flavigny.de/lecture
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

69 行
1.3KB

  1. // Die Menge wird durch ein IntList realisiert
  2. struct IntSet {
  3. IntList list;
  4. } ;
  5. // Erzeuge eine leere Menge
  6. IntSet* empty_set ()
  7. {
  8. IntSet* s = new IntSet;
  9. empty_list(&s->list);
  10. return s;
  11. }
  12. // pruefe ob x in Menge ist
  13. bool is_in_set (IntSet* s, int x)
  14. {
  15. for (IntListElem* p=s->list.first; p!=0; p=p->next)
  16. if (p->value==x) return true;
  17. return false;
  18. }
  19. // Fuege Element in Menge ein
  20. void insert_in_set (IntSet* s, int x)
  21. {
  22. // pruefe ob Element bereits in Liste
  23. // sonst fuege es ein
  24. if (!is_in_set(s,x))
  25. {
  26. IntListElem* p = new IntListElem;
  27. p->value = x;
  28. insert_in_list(&s->list,0,p);
  29. }
  30. }
  31. // Entferne x aus Menge
  32. void remove_from_set (IntSet* s, int x)
  33. {
  34. // Hat es ueberhaupt Elemente?
  35. if (s->list.first==0) return;
  36. // Teste erstes Element
  37. if (s->list.first->value==x)
  38. {
  39. IntListElem* p=remove_from_list(&s->list,0);
  40. delete p;
  41. return;
  42. }
  43. // Suche in Liste, teste immer Nachfolger
  44. // des aktuellen Elementes
  45. for (IntListElem* p=s->list.first; p->next!=0; p=p->next)
  46. if (p->next->value==x)
  47. {
  48. IntListElem* q=remove_from_list(&s->list,p);
  49. delete q;
  50. return;
  51. }
  52. }
  53. // drucke Liste
  54. void print_set (IntSet* s)
  55. {
  56. print("(");
  57. for (IntListElem* p=s->list.first; p!=0; p=p->next)
  58. print(" ",p->value,0);
  59. print(")");
  60. }