stack data structure c with illustration
dvd rippen en branden software gratis
Alles wat u moet weten over Stack in C ++.
Stack is een fundamentele datastructuur die wordt gebruikt om elementen lineair op te slaan.
Stack volgt LIFO (last in, first out) volgorde of benadering waarin de bewerkingen worden uitgevoerd. Dit betekent dat het element dat als laatste aan de stapel is toegevoegd, het eerste element is dat van de stapel wordt verwijderd.
Bezoek hier om de volledige C ++ trainingsreeks voor iedereen te zien.
Wat je leert:
- Stapelen in C ++
Stapelen in C ++
Een stapel is vergelijkbaar met een echte stapel of een stapel dingen die we boven elkaar stapelen.
Hieronder is een grafische weergave van Stack gegeven.
Zoals hierboven getoond, is er een stapel platen op elkaar gestapeld. Als we er nog een item aan willen toevoegen, dan voegen we het bovenaan de stapel toe zoals weergegeven in de bovenstaande afbeelding (linkerkant). Deze bewerking van het toevoegen van een item aan de stapel wordt ' Duwen
Aan de rechterkant hebben we een tegenovergestelde bewerking laten zien, d.w.z. we verwijderen een item van de stapel. Dit gebeurt ook vanaf hetzelfde uiteinde, namelijk de bovenkant van de stapel. Deze bewerking heet ' Knal
Zoals te zien is in de bovenstaande afbeelding, zien we dat push en pop vanaf hetzelfde uiteinde worden uitgevoerd. Dit zorgt ervoor dat de stapel de LIFO-bestelling volgt. De positie of het einde van waaruit de items in of uit de stapel worden geduwd of uitgeklapt, wordt de ' Bovenkant van de stapel
In eerste instantie, als er geen items in de stapel zijn, wordt de bovenkant van de stapel ingesteld op -1. Wanneer we een item aan de stapel toevoegen, wordt de bovenkant van de stapel met 1 verhoogd, wat aangeeft dat het item is toegevoegd. In tegenstelling hiermee wordt de bovenkant van de stapel met 1 verlaagd wanneer een item uit de stapel wordt gehaald.
Vervolgens zullen we enkele basisbewerkingen van de stapelgegevensstructuur zien die we nodig zullen hebben bij het implementeren van de stapel.
Basisbewerkingen
Hieronder volgen de basisbewerkingen die worden ondersteund door de stapel.
- Duwen - Voegt een element toe of duwt het in de stapel.
- pop - Verwijdert of springt een element uit de stapel.
- gluren - Haalt het bovenste element van de stapel, maar verwijdert het niet.
- is vol - Test of de stapel vol is.
- is leeg - Test of de stapel leeg is.
Illustratie
De bovenstaande afbeelding toont de volgorde van bewerkingen die op de stapel worden uitgevoerd. Aanvankelijk is de stapel leeg. Voor een lege stapel wordt de bovenkant van de stapel ingesteld op -1.
Vervolgens duwen we het element 10 in de stapel. We zien dat de bovenkant van de stapel nu naar element 10 wijst.
Vervolgens voeren we nog een push-operatie uit met element 20, waardoor de bovenkant van de stapel nu naar 20 wijst. Deze toestand is het derde cijfer.
Nu voeren we in de laatste afbeelding een pop () -bewerking uit. Als resultaat van de pop-operatie wordt het element dat bovenaan de stapel wijst van de stapel verwijderd. Daarom zien we in de figuur dat element 20 van de stapel is verwijderd. Dus de bovenkant van de stapel wijst nu naar 10.
Op deze manier kunnen we gemakkelijk de LIFO-benadering onderscheiden die door stack wordt gebruikt.
Implementatie
# 1) Arrays gebruiken
Hieronder volgt de C ++ -implementatie van stack met arrays:
Uitgang:
De stapel push
twee
4
6
The Stack Pop:
6
4
twee
In de uitvoer kunnen we zien dat de elementen in één volgorde in de stapel worden geduwd en in omgekeerde volgorde uit de stapel worden gehaald. Dit vertoont de LIFO-benadering (Last in, First out) voor de stapel.
Voor de bovenstaande array-implementatie van de stack kunnen we concluderen dat dit zeer eenvoudig te implementeren is omdat er geen aanwijzingen zijn. Maar tegelijkertijd is de grootte van de stapel statisch en kan de stapel niet dynamisch groeien of krimpen.
Vervolgens zullen we de stack implementeren met behulp van arrays in de programmeertaal Java.
Uitgang:
Stapel push:
een
3
5
Stack Pop:
5
3
een
De implementatielogica is hetzelfde als bij C ++ - implementatie. De uitvoer toont de LIFO-techniek van het naar binnen duwen en eruit springen van de elementen van / naar de stapel.
Zoals reeds vermeld, is stackimplementatie met behulp van arrays de eenvoudigste implementatie, maar is deze van statische aard omdat we de stack niet dynamisch kunnen laten groeien of verkleinen.
# 2) Een gekoppelde lijst gebruiken
Vervolgens implementeren we stapelbewerkingen met behulp van een gekoppelde lijst in zowel C ++ als Java. Eerst zullen we de C ++ -implementatie demonstreren.
Uitgang:
Stapel push:
100
200
300
Topelement is 300
Stack Pop:
300
200
100
Topelement is -1
Vervolgens presenteren we de Java-implementatie van de stapel met behulp van een gekoppelde lijst.
Uitgang:
Stapel push:
100
200
300
Topelement is 300
Stack Pop:
300
200
100
Stapel is leeg
Het bovenste element is -2147483648
We hebben zojuist C ++ - en Java-implementaties gezien voor een stapel met gekoppelde lijsten. We vertegenwoordigen elk stapelitem als een knooppunt van de gekoppelde lijst. Het belangrijkste voordeel van deze implementatie is dat deze dynamisch is. Dit betekent dat we de stapelgrootte kunnen vergroten of verkleinen volgens onze vereisten.
Dit is in tegenstelling tot het geval van stackimplementatie met arrays waarin we de grootte van tevoren moeten aangeven en deze niet dynamisch kunnen wijzigen.
Het nadeel van deze implementatie is dat, aangezien we overal pointers gebruiken, het iets te veel ruimte in beslag neemt in vergelijking met array-implementatie.
Toepassingen van Stack
Laten we enkele van de toepassingen van de stapelgegevensstructuur bespreken. De stack-datastructuur wordt gebruikt in een reeks toepassingen in softwareprogrammering, voornamelijk vanwege de eenvoud en het gemak van implementatie.
We zullen enkele van de toepassingen van de onderstaande stapel kort beschrijven:
# 1) Tussenvoegsel naar postfix-expressies
Elke algemene rekenkundige uitdrukking heeft de vorm operand1 OP operand 2
Op basis van de positie van operator OP hebben we de volgende soorten uitdrukkingen:
- Infix - De algemene vorm van tussenvoegseluitdrukking is ' operand1 OP operand 2 Dit is de basisvorm van de uitdrukking en we gebruiken het altijd in de wiskunde.
- Voorvoegsel - Als een operator voor de operanden wordt geplaatst, is dit een voorvoegseluitdrukking. De algemene vorm van tussenvoegseluitdrukking is ' OP operand1 operand2
- Postfix - In postfix-expressies worden operanden eerst geschreven, gevolgd door de operator. Het heeft de vorm 'operand1 operand2 OP'.
Beschouw de uitdrukking 'a + b * c De compiler scant de uitdrukking van links naar rechts of van rechts naar links. Zorgend voor de prioriteit en associativiteit van de operator, zal het eerst de uitdrukking scannen om de uitdrukking b * c te evalueren. Vervolgens zal het opnieuw de uitdrukking moeten scannen om het resultaat van b * c toe te voegen aan a.
Naarmate de uitdrukkingen steeds complexer worden, wordt dit soort benadering van het steeds opnieuw scannen van de uitdrukking inefficiënt.
Om deze inefficiëntie te verhelpen, zetten we de uitdrukking om in een postfix of prefix, zodat ze gemakkelijk kunnen worden geëvalueerd met behulp van een stapelgegevensstructuur.
# 2) Expressie parseren / evalueren
Met behulp van stack kunnen we ook daadwerkelijke expressie-evaluatie uitvoeren. Hierin wordt de uitdrukking van links naar rechts gescand en worden operanden op de stapel geduwd.
Telkens wanneer een operator wordt aangetroffen, worden operanden uitgeklapt en wordt de bewerking uitgevoerd. Het resultaat van de operatie wordt weer in de stapel geschoven. Op deze manier wordt de uitdrukking geëvalueerd door stapel te gebruiken en het uiteindelijke resultaat van de uitdrukking is meestal de huidige bovenkant van de stapel.
# 3) Doorkruisen van bomen
De datastructuur van de boom kan worden doorlopen om elk knooppunt op vele manieren te bezoeken en afhankelijk van wanneer het hoofdknooppunt dat we hebben wordt bezocht.
beste gratis besturingssysteem voor laptop
- inOrder traversal
- Preorder Traversal
- postOrder traversal
Om de boom efficiënt te doorkruisen, maken we gebruik van de datastructuur van de stapel om tussenliggende knooppunten op de stapel te duwen, zodat we de volgorde van doorlopen behouden.
# 4) Sorteeralgoritmen
Sorteeralgoritmen zoals quicksort kunnen efficiënter worden gemaakt met behulp van de stack-datastructuren.
# 5) Torens van Hanoi
Dit is een klassiek probleem met een n aantal schijven en drie torens en het probleem betreft het verplaatsen van de schijven van de ene toren naar de andere met de derde toren als tussenliggende toren.
Dit probleem kan efficiënt worden aangepakt met behulp van de stapel terwijl we de te verplaatsen schijven op de stapel duwen, aangezien de stapel in feite fungeert als een toren die wordt gebruikt om de schijven te verplaatsen.
Gevolgtrekking
De stapel is de eenvoudigste datastructuur en gemakkelijker te implementeren als een programma. Het gebruikte de LIFO-benadering (last in, first out), wat betekent dat het laatst ingevoerde element het element is dat als eerste wordt verwijderd. Dit komt omdat stack slechts één uiteinde gebruikt om elementen toe te voegen (push) en te verwijderen (pop).
De datastructuur van de stack heeft veel toepassingen bij softwareprogrammering. De belangrijkste daarvan zijn evaluaties van uitdrukkingen. Uitdrukkingsevaluatie omvat ook het converteren van de uitdrukking van tussenvoegsel naar postfix of voorvoegsel. Het omvat ook het evalueren van de uitdrukking om het uiteindelijke resultaat te produceren.
In deze tutorial hebben we de illustratie en implementatie van de stapel gezien, evenals de verschillende bewerkingen.
In onze aanstaande tutorial zullen we in detail meer te weten komen over de datastructuur van de wachtrij.
Bezoek hier voor de complete C ++ -cursus van experts.
Aanbevolen literatuur
- Wachtrijgegevensstructuur in C ++ met illustratie
- Circulaire gekoppelde lijstgegevensstructuur in C ++ met illustratie
- Gekoppelde lijstgegevensstructuur in C ++ met illustratie
- Prioriteitswachtrijgegevensstructuur in C ++ met illustratie
- Dubbel gekoppelde lijstgegevensstructuur in C ++ met illustratie
- Inleiding tot gegevensstructuren in C ++
- Parametrering van JMeter-gegevens met behulp van door de gebruiker gedefinieerde variabelen
- 10+ beste tools voor gegevensverzameling met strategieën voor het verzamelen van gegevens