In Computer Science zijn stack en wachtrij twee abstracte gegevenstypen die eenvoudige gegevensstructuren zijn die pointers gebruiken om dynamische sets te vertegenwoordigen. Er kan echter een verschil tussen hen worden vastgesteld op basis van hun implementaties. Basisbewerkingen voor het invoegen en verwijderen van elementen worden zowel door stack als door wachtrij ondersteund. De grootste verschil tussen Stack en Queue is dat een stack gereedschap Last In First Out of LIFO-beleid, overwegende dat a wachtrij gereedschap First In First Out of FIFO-beleid.
Een stapel is een lineaire datastructuur die dient als een verzameling elementen. Slechts één uiteinde van de structuur is toegankelijk om bewerkingen uit te voeren op elementen en wordt meestal aangeduid als de top. Twee hoofdbewerkingen kunnen op een stapel worden uitgevoerd; Duwen en knal. Een 'insert'-bewerking uitgevoerd op een stapel wordt genoemd Duwen en een 'delete'-bewerking uitgevoerd op een stapel wordt aangeroepen knal.
De Duwen bewerking voegt een element toe aan de bovenkant van de verzameling. Het uitvoeren van een knal bewerking verwijdert een element dat zich bovenaan de verzameling bevindt. Omdat de elementen die uit de stapel worden verwijderd in omgekeerde volgorde staan als de volgorde waarin ze zijn toegevoegd, is de structuur bekend dat ze Last In First Out of een LIFO-benadering volgen. Gegeven deze implementatie zijn de laagste elementen het langst op de stapel geweest.
Een stapel wordt beschouwd als een beperkte datastructuur vanwege het kleine aantal bewerkingen dat op een stapel kan worden uitgevoerd. Bovendien, een kijkje bewerking kan worden geïmplementeerd om de waarde van het bovenste element te retourneren zonder het element te wijzigen. Ook hebben implementaties van een stapel vaak een Is leeg functie om te controleren of de stapel leeg is. In omgevingen die sterk afhankelijk zijn van stacks, functies zoals verwijderen, swap / uitwisseling en draaien kan ook worden verstrekt. Maar deze zijn niet essentieel voor de basisfunctionaliteit van een stapel.
Een stapel heeft een begrensde capaciteit. Als de stapel vol is, wordt deze overstroomt, wat betekent dat er niet genoeg ruimte is om meer elementen op de stapel te plaatsen. Als de stapel leeg is en er geen elementen te zien zijn, bevindt de stapel zich in een onderstroomtoestand.
Een stapel kan eenvoudig worden geïmplementeerd met behulp van arrays of gekoppelde lijsten in de meeste programmeertalen op hoog niveau.
Stacks zijn toepasbaar in gebieden zoals het evalueren van rekenkundige expressies, runtime-geheugenbeheer, tree traversal, syntax-parsing, enz..
Een wachtrij is een lineaire gegevensstructuur die ook als een verzameling elementen dient. Beide uiteinden van een wachtrij zijn toegankelijk voor het uitvoeren van bewerkingen op elementen en worden doorgaans genoemd hoofd en staart. Twee hoofdbewerkingen kunnen in een wachtrij worden uitgevoerd; enqueue en dequeue. enqueue is de invoegbewerking terwijl dequeue is de verwijderingshandeling uitgevoerd in een wachtrij.
Wanneer een element in de wachtrij wordt geplaatst, wordt het aan de staart van de wachtrij toegevoegd. Het uitvoeren van een dequeue bewerking verwijdert een element uit de kop van de wachtrij. Omdat de in het rij gestelde elementen altijd in dezelfde volgorde worden uitgelokt als ze in de wachtrij werden geplaatst, zou de structuur een First In First Out- of FIFO-benadering implementeren..
Net als bij een stapel is een wachtrij ook een beperkte datastructuur gezien het kleine aantal operaties dat kan worden uitgevoerd. Bovendien, een kijkje bewerking kan in een wachtrij worden geïmplementeerd, die de waarde van het element aan het begin van de wachtrij retourneert zonder het te laten misleiden. Andere primitieve bewerkingen in een wachtrij kunnen omvatten Is leeg, Is vol, en tonen. De Is leeg functie controleert of de wachtrij leeg is en Is vol controleer of de wachtrij vol is. De tonen functie kan worden gebruikt om de inhoud van de wachtrij weer te geven. Maar nogmaals, deze functies zijn niet cruciaal voor de implementatie van een wachtrij.
In tegenstelling tot een stapel kunnen wachtrijen worden geïmplementeerd met een beperkte capaciteit of zonder specifieke capaciteit. Een overlooptoestand van een wachtrij treedt op wanneer een element in de wachtrij voor een volledige wachtrij wordt geplaatst en een onderstroomstatus optreedt wanneer een element uit de wachtrij wordt geplaatst, maar de wachtrij is leeg.
Het type wachtrij kan verschillen over hoe wervende en uittredende bewerkingen worden uitgevoerd op elementen. Circulaire wachtrij, prioriteitswachtrij en wachtrij met dubbele wachtrij zijn de speciale soorten wachtrijen.
Met behulp van arrays en gekoppelde lijsten kunnen wachtrijen efficiënt worden geïmplementeerd in programmeertalen op hoog niveau.
Wachtrijen zijn van toepassing op veel gebieden, zoals simulaties, batchverwerking in besturingssystemen, planningsalgoritmen, bufferverzoeken, multiprogrammeringsplatformsystemen, enz..
Toegankelijkheid tot elementen
In een stack, bewerkingen op gegevens kunnen alleen bovenaan de stapel worden uitgevoerd.
In een wachtrij, beide uiteinden van de wachtrij zijn toegankelijk voor bewerkingen. Een invoeging vindt plaats aan de staart van de rij en een schrapping kan aan het hoofd worden gemaakt.
Gedrag
EEN stack is een LIFO-gegevensstructuur, waarbij het element dat het laatst aan de stapel is toegevoegd, het eerste element is dat moet worden verwijderd. De verwijdering is in omgekeerde volgorde van de volgorde van toevoeging.
EEN wachtrij is een FIFO-gegevensstructuur, waarbij het element dat als eerste aan de wachtrij is toegevoegd, het eerste element is dat moet worden verwijderd. Volgorde van invoegen en verwijderen is hetzelfde.
Basisbewerkingen
In een stack, een element wordt bovenaan de stapel ingevoegd en ook van de bovenkant verwijderd.
Maar in een wachtrij, een element wordt ingevoegd aan het einde van een wachtrij en wordt van de voorkant verwijderd.
Capaciteit
EEN stack heeft een beperkte capaciteit.
EEN wachtrij kan een beperkte capaciteit hebben, maar wordt meestal geïmplementeerd zonder een specifieke capaciteit.
Verspilling van geheugenruimte
Sinds een stack heeft slechts één aanwijzer nodig om de bovenkant van de stapel bij te houden, er is geen verspilling van geheugenruimte.
EEN wachtrij heeft twee wijzers 'voor' en 'achteraan' nodig om beide uiteinden van de wachtrij bij te houden. Daarom is er verspilling van geheugenruimte.
Zowel de stapel als de wachtrij worden gebruikt voor het bijhouden van geordende lijsten met elementen. Terwijl een stapel een LIFO-gegevensstructuur is, implementeert een wachtrij een FIFO-benadering. Slechts één uiteinde van een stapel is toegankelijk voor hoofdbewerkingen, maar beide uiteinden van een wachtrij kunnen worden gebruikt.