Noch eine Anmerkung: malloc auf "richtigen" Rechnern ist das Mittel der
Wahl, wenn es um die Verwaltung von Daten geht, die nicht von Natur aus
begrenzt sind. Arrays fester Länge für potentiell unbegrenzte Daten
wäre bäh und gelinkte Listen lassen sich schön verlängern, umsortieren,
an beliebiger Stelle verkleinern usw.
Man hat kein "hartes" Limit - ist der dem Prozess allozierte Speicher
voll, wird neuer angefordert, und reicht der nicht aus, geht's ins
virtuelle (Swap) und das Programm wird nur langsamer.
Beim Mikrocontroller hast Du dagegen von vornherein ein hartes Limit mit
knappem SRAM. Dazu kommt, dass malloc() Dir wohl den Speicher
verweigert, wenn sicher nichts mehr da ist, aber ein Gelingen eines
malloc() nicht garantiert, dass Du den sicher für immer und ewig
benutzen kannst. Der Stack kann runterlaufen und Dir in die Liste
reinschreiben oder, schlimmer noch, Du in den Stack, womit es dann Sense
mit dem Programmablauf wäre.
Du musst also ohnehin austarieren, wieviel Elemente maximal reinpassen,
bevor Unbill passiert und dies als harte Grenze festlegen. "Der Swap
wird's schon richten" ist nicht.
Es liegt nahe, dann gleich ein Array festgelegter Größe zu nehmen. Du
gehst so sparsamer mit dem ohnehin immer knappen Ram um (malloc belegt
Verwaltungsinformationen, die Links für die Listen entfallen, der
Programmoverhead der Speicherverwaltung ebenfalls).
Ob Du ein Indexarray sortierst oder eine verlinkte Liste, ist gerade
egal. Und meist geht's sogar ganz ohne Indexarray ab, denn bei den zur
Verfügung stehenden Ram-Größen kann man (wenn Zeit nicht kritisch ist)
auch alle Operationen inklusive Einfügen und Entfernen auf dem Array
direkt machen.
Überleg's Dir also genau, ob Du Dich in den malloc() verbeißen möchtest.
Mikrocontroller sind nunmal keine ausgewachsenen Computer und wollen
anders programmiert sein. Wozu auch gegen die Hardware anarbeiten,
wenn's einfacher geht?