Ring-puskuri eli syklinen puskuri ( eng. ring-buffer ) on tietorakenne , joka käyttää yhtä kiinteän kokoista puskuria siten, että ensimmäinen elementti seuraa välittömästi viimeistä elementtiä. Tämä rakenne tarjoaa helposti mahdollisuuden puskuroida tietovirtoja .
Rengaspuskuria käytetään erittäin laajasti, myös mikro -ohjainten ohjelmoinnissa . Näitä rakenteita käytetään usein erilaisten viestijonojen järjestämiseen ja eri tiedonsiirtorajapintojen lähetys/vastaanottopuskureihin. KB:n suosio johtuu siitä, että tämä on yksi yksinkertaisimmista ja tehokkaimmista tavoista järjestää FIFO ( englanniksi first in - first out , "first in - first out") ilman dynaamista muistia. KB-tyyppejä on monenlaisia.
Soittopuskuri luodaan tyhjäksi, jolla on ennalta määrätty pituus. Tämä on esimerkiksi seitsemän elementin puskuri:
Oletetaan, että puskurin keskelle kirjoitetaan "1" (rengaspuskurissa tarkalla aloitussolulla ei ole väliä):
Oletetaan sitten, että yksikön jälkeen lisättiin vielä kaksi elementtiä - "2" ja "3":
Jos kaksi elementtiä on tämän jälkeen poistettava puskurista, valitaan kaksi vanhinta elementtiä. Tässä tapauksessa elementit "1" ja "2" poistetaan, puskuriin jää vain "3":
Jos puskurissa on 7 elementtiä, se on täynnä:
Jos jatkat puskuriin kirjoittamista sen täyteydestä riippumatta, uudet tiedot alkavat korvata vanhat tiedot. Tässä tapauksessa elementtien "A" ja "B" lisääminen korvaa "3" ja "4":
Toisessa toteutuksessa puskuria ylläpitävät rutiinit voivat estää tietojen päällekirjoittamisen ja palauttaa virheen tai heittää poikkeuksen . Korvaaminen vai ei, on jätetty puskurin taustaohjelmien tai rengaspuskuria käyttävän sovelluksen harkintaan.
Lopuksi, jos kaksi elementtiä poistetaan puskurista, ei "3" ja "4", vaan "5" ja "6" poistetaan, koska "A" ja "B" ylikirjoittivat elementit "3" ja " 4"; puskuri on tilassa:
Tietorakenteet | |
---|---|
Luettelot | |
puut | |
Laskee | |
Muut |