G
Bisher hab ich mich mit dem Huffmann Algo noch nicht beschäftigt, kann dir deshalb auch keine Optimierung dazu geben. Aber hier mal ein paar Tipps zum Code:
sprintf(puffer,"%s%c",puffer,res[i]);
Wenn ich das richtig sehe, dann willst du hier ein Zeichen an einen String anhängen. Das geht auch besser. Dazu initialisierst du zu Beginn eine Variable, zB len, mit der Länge des Strings und ersetzt dann den Code durch
puffer[len] = res[i];
++len;
puffer[len] = '\0';
ascii[j].bincode!=""
Das wird nicht wie gewünscht funktionieren, da in C Strings nicht mit dem == und != Operator verglichen werden können. Was du hier im Grunde vergleichst, sind die Adressen. Deshalb wird der Ausdruck immer true ergeben. Wenn es dir einfach nur darum geht, zu prüfen ob der String nicht leer ist, geht das wie folgt
ascii[j].bincode[0] != '\0'
strcoll(puffer,ascii[j].bincode)
Muss denn strcoll unbedingt sein? Oder reicht strcmp nicht auch?
*(puffer+k)=0;
Wieso so eine komplizierte Schreibweise? Schreib doch einfach
puffer[k] = 0;
Und noch ein allgemeiner Tipp. Du arbeitest mit Strings, und die sind im allgemeinen langsamer als normale Arrays. Wenn's also geht, nimm einfache Datenarrays. Dann kannst du zB auch Funktionen wie memcmp anstatt strcmp verwenden, und das sorgt wie gesagt für mehr Performance.