私は、
・構造体のメンバ毎に配列を用意する
・malloc()するときは、使用済みプールに空き要素番号があればそれを再利用、無ければメンバ毎の配列にpushして増やす
・free()するときは該当する要素に無効な値をいれつつ、使用済みプール(これも配列です)にfree()する要素番号をpushする
という感じで一度作ったことがあります(*´▽`*)
その後、ハフマン復号時の速度を稼ぐため、2分木リストを1ビットずつたどらず、配列参照で一発で復号する方法にしちゃいました(´・ω・`)
(LZSSではハフマン符号の最大符号長が制限されているので、例えば符号長が最大15bitなら、32768要素の配列を用意すれば、「考え得る全ての入力ビット列に対応するシンボル」を全部格納できてしまうのですね)
下記のライブラリは、LZSSだけじゃなくPNGの画像処理部分も入っているた不要な情報も多いと思いますが、もしよろしければ。
画像圧縮ライブラリMEG 公開キー【N3H314W3】
参考にしたサイト様:
http://darkcrowcorvus.hatenablog.jp/entry/2017/01/07/165627