Hallo Fragewurm,
Kannst du mir das vllt noch ma genauer erklären, ich häng
gerade sowas von aufm Schlauch. Und dazu kommt, das ich gerade
Mikrokontroller programmiere, was mehr auf bits und weniger
auf Bytes setzt. und Außerdem habe ich da ZUstandsbits/-flags,
die einem das Programmmieren dann doch extrem vereinfachen.
Also würd mich freuen, wenn ich dir die Zeit stehlen dürfte,
wenn du es nochmal ein wenig genauer beschreibst.
Zuerst benötigst du ein Array um die Hüffigkeit zu bestimmem. Wenn wir mal 8-Bit für die Zeichen annehmen:
typedef struct -sKNOTEN
{
unsigned in zaeler;
} sKNOTEN;
sKNOTEN knoten[256];
jetzt kannst du mit
unsigned char c; // hier ist das zeichen drin
knoten[c].zaeler++;
mal die Zählerei erledigen.
Danach bildest du eine Zeite Liste und sortierst diese entsprechend dem Algothmus.
Nun müssen wir das ganze noch etwas erweitern:
typedef struct \_sKNOTEN
{
struct \_sKNOTEN \*links;
struct \_sKNOTEN \*rechts;
unsigned in zaeler;
} sKNOTEN;
sKNOTEN knoten[256];
jetzt benötigst du noch eine Variable welche den Anfang des Baums enthält, welchen du aus der Verteilung bekommst.
Von diesem Knoten aus, kannst du nun den Baum mit „links“ und „rechts“ aufbauen.
Bei jedem Blatt musst du entspreched NULL in „links“ oder „rechts“ eintagen um zu erkennen wo der Zweig endet.
Decodieren kannst du nun in einer Schlaufe:
unsigned char decode( unsigned int code, unsigned char bit\_anzahl)
{
unsigned int maske;
sKNOTEN \*ptr1;
sKNOTEN \*ptr2 = &knoten[start];
temp = 1 rechts;
else ptr2 = ptr1-\>links;
maske \>\>= 1;
}
return ptr1 - &knoten[0];
}
OK, ich habe das ganze jetzt nicht getestet.
MfG Peter(TOO)