Ringpuffer

Ringpuffer

Mittel

Anleitung

Ein Ringpuffer (auch zirkulärer Puffer oder zyklischer Puffer genannt) ist eine Datenstruktur, die einen einzelnen Puffer mit fester Größe verwendet, als wäre er an den Enden miteinander verbunden.

Ein Ringpuffer ist anfangs leer und hat eine vorgegebene Länge. Zum Beispiel ist dies ein Puffer mit 7 Elementen:

[ ][ ][ ][ ][ ][ ][ ]

Angenommen, wir schreiben eine 1 in die Mitte des Puffers (die genaue Startposition spielt bei einem Ringpuffer keine Rolle):

[ ][ ][ ][1][ ][ ][ ]

Dann fügen wir zwei weitere Elemente hinzu, 2 und 3, die nach der 1 angehängt werden:

[ ][ ][ ][1][2][3][ ]

Wenn wir dann zwei Elemente aus dem Puffer entfernen, entfernen wir die ältesten Werte im Puffer. Die beiden entfernten Elemente sind in diesem Fall 1 und 2, sodass nur die 3 im Puffer bleibt:

[ ][ ][ ][ ][ ][3][ ]

Wenn der Puffer 7 Elemente enthält, ist er vollständig voll:

[5][6][7][8][9][3][4]

Wenn der Puffer voll ist, wird ein Fehler ausgelöst, der den Client darüber informiert, dass weitere Schreibvorgänge blockiert sind, bis ein Platz frei wird.

Wenn der Puffer voll ist, kann der Client die ältesten Daten mit einem erzwungenen Schreibvorgang überschreiben. In diesem Fall werden zwei weitere Elemente hinzugefügt, A und B, und sie überschreiben die 3 und 4:

[5][6][7][8][9][A][B]

3 und 4 wurden durch A und B ersetzt, wodurch 5 jetzt das älteste Element im Puffer ist. Wenn wir schließlich zwei Elemente entfernen, werden 5 und 6 zurückgegeben, und der Puffer sieht dann so aus:

[ ][ ][7][8][9][A][B]

Da Platz verfügbar ist, wird, wenn der Client erneut die Überschreibfunktion nutzt, um C und D zu speichern, der Platz verwendet, an dem zuvor 5 und 6 gespeichert waren, und nicht die Position von 7 und 8. 7 ist immer noch das älteste Element, und der Puffer ist wieder voll.

[C][D][7][8][9][A][B]

Quelle

WikipediaDer Link öffnet sich in einem neuen Fenster oder Tab
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Delphi Pascal Exercism

Bereit, mit Ringpuffer zu starten?

Melde dich bei Exercism an, um Delphi Pascal mit 76 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.

Tauche tiefer in Ringpuffer ein!

In diesem Video schauen wir uns den Ringpuffer an: was er ist, wo er verwendet wird und welche Implementierungen es gibt – darunter Warteschlangen, statische und dynamische Arrays, unveränderliche Datenstrukturen und eine unterhaltsame agentenbasierte Umsetzung.