LIFO-Stapelspeicher Überlauf sauber programmieren

Dieses Thema im Forum "Programmieren" wurde erstellt von Herakles, 17 April 2012.

  1. Herakles

    Herakles Profifragensteller

    Registriert seit:
    2 Juni 2003
    Beiträge:
    1.031
    Ort:
    Emsdetten
    Moin!

    Ich habe einen LIFO-Speicher, der als statischer Array mit 500 Elementen in einem C-Programm realisiert ist.

    Nun möchte ich im Falle des Überlaufs des LIFO(also wenn ein neues Element hinzugefügt werden soll, der Stapelspeicher aber voll ist) das älteste Element löschen und dafür das neuste hinzufügen.

    Meiner Logik zufolge ist so ein LIFO aber nur dafür gedacht, das oberste Element des Stapelspeichers abzuarbeiten - eben "Last in, First out".

    Ich könnten nun auch hergehen und die Inhalte aller Elemente des Arrays in das jeweils nächste kopieren, damit letztendlich ein Element frei wird, aber das wäre schon sehr viele Kopieroperation und das möchte ich dem Rechner eigentlich ersparen(ich arbeite auf einer sehr kleinen, "schwachbrüstigen" Hardware).

    Ein "free()" und dann "malloc()" verbietet sich aufgrund des statischen Arrays...

    Habe ich nur einen Knoten im Kopf oder gibt es hier wirklich ein Problem?

    Habt Dank für jeden Tipp!

    Herakles
  2. ernst

    ernst Member

    Registriert seit:
    26 Januar 2010
    Beiträge:
    109
    Koenntest du das nicht so aehnlich wie bei einem Ringpuffer machen, du merkst dir quasi den Index wo das unterste Element anfaengt und wo das oberste liegt? Wenn dein Speicher dann voll ist, inkrementierst du dann quasi den Index fuers unterste Element. Die Indizes kannst du dann zB %500 rechnen damit diese immer im Intervall [0;499] liegen.
  3. Daniel_S

    Daniel_S Member

    Registriert seit:
    14 Dezember 2003
    Beiträge:
    57
    Ort:
    Bremen
    Hi ist es möglich das du eine linked list im statischen Array abbildest die nicht mit Zeigern sondern mit Indiezen arbeitet? Dann kann du die Elemente nach belieben umhängen wie mit einer normalen linked list im Speicher.

    Gruß Daniel_s