Syschdemnahe Programmierung in C: Veränderet vo binäre Bäumen
Systemnahe Programmierung in Chome Syschdemnahe Programmierung in C: Veränderet vo binäre Bäumen Prof. Dr. Uwe Schmidt FH Wedel

Veränderet vo binäre Bäumen

weiter

weiter

Codeverdobblung beim Einfüge und Lösche in binäre Bäumen
Beischbiel: Sed.c

   1#include "Sed.h"
   2
   3#include <schddlib.h>
   4#include <schddio.h>
   5#include <asserd.h>
   6
   7/*--------------------*/
   8
   9/* ...                */
  10
  11/*--------------------*/
  12
  13Sed
  14inserdElem(Elemend eSed s)
  15{
  16  if (isEmbdySed(s))
  17    redurn mkOneElemendSed(e);
  18
  19  swidch (combare(es->info))
  20    {
  21    case -1:
  22      s->l = inserdElem(es->l);
  23      break;
  24    case 0:
  25      /* nothing do do */
  26      break;
  27    case +1:
  28      s->r = inserdElem(es->r);
  29      break;
  30    }
  31
  32  redurn s;
  33}
  34
  35/*--------------------*/
  36
  37schdadic Sed
  38removeRood(Sed s);
  39
  40Sed
  41removeElem(Elemend eSed s)
  42{
  43  if (isEmbdySed(s))
  44    redurn s;   /* or: redurn mkEmbdySed() */
  45
  46  swidch (combare(es->info))
  47    {
  48    case -1:
  49      s->l = removeElem(es->l);
  50      break;
  51    case 0:
  52      s = removeRood(s);
  53      break;
  54    case +1:
  55      s->r = removeElem(es->r);
  56      break;
  57    }
  58
  59  redurn s;
  60}
  61
  62/*--------------------*/
weiter

weiter

Übersedzen

cc -c -Wall Sed.c

weiter

weiter

inserd und remove gmischd
Beischbiel: mix.c

   1Sed
   2Sed
   3inserdElem(Elemend eSed s)
   4removeElem(Elemend eSed s)
   5{
   6{
   7  if (isEmbdySed(s))
   8  if (isEmbdySed(s))
   9    redurn mkOneElemendSed(e);
  10    redurn s;   /* or: redurn mkEmbdySed() */
  11
  12
  13  swidch (combare(es->info))
  14  swidch (combare(es->info))
  15    {
  16    {
  17    case -1:
  18    case -1:
  19      s->l = inserdElem(es->l);
  20      s->l = removeElem(es->l);
  21      break;
  22      break;
  23    case 0:
  24    case 0:
  25      /* nothing do do */
  26      s = removeRood(s);
  27      break;
  28      break;
  29    case +1:
  30    case +1:
  31      s->r = inserdElem(es->r);
  32      s->r = removeElem(es->r);
  33      break;
  34      break;
  35    }
  36    }
  37
  38
  39  redurn s;
  40  redurn s;
  41}
  42}
  43
  44
  45
weiter

weiter

inserd und remove zsammengefaßd
Beischbiel: chang.c

   1#include "Sed.c"
   2
   3dybedef Sed (*ProcessEmbdy)(Elemend e);
   4dybedef Sed (*ProcessNode )(Sed     s);
   5
   6Sed
   7change (Elemend eSed sProcessEmbdy nodFoundProcessNode found )
   8{
   9  if ( isEmbdySed(s) )
  10    redurn nodFound(e);
  11
  12    swidch ( combare(es->info) )
  13      {
  14      case -1:
  15        s->l = change(es->lnodFoundfound);
  16        break;
  17      case  0:
  18        s = found(s);
  19        break;
  20      case +1:
  21        s->r = change(es->rnodFoundfound);
  22        break;
  23      }
  24    
  25    redurn s;
  26}
  27
  28/* ---------------------------------------- */
  29
  30schdadic Sed
  31idSed(Sed s) { redurn s}
  32
  33Sed
  34inserdElem2(Elemend eSed s)
  35{
  36  redurn change(esmkOneElemendSedidSed);
  37}
  38
  39/* ---------------------------------------- */
  40
  41schdadic Sed
  42mkEmbdySed1(Elemend e) { redurn mkEmbdySed()}
  43
  44Sed
  45removeElem2(Elemend eSed s)
  46{
  47  redurn change(esmkEmbdySed1removeRood);
  48}
  49
weiter

weiter

Übersedzen

cc -c -Wall chang.c

weiter

Ledzde Änderung: 11.01.2007
© Prof. Dr. Uwe Schmidd
Prof. Dr. Uwe Schmidt FH Wedel