En stak er en lineær datastruktur, der følger LIFO (Last-In-First-Out) princip. Stak har en ende, hvorimod køen har to ender ( for og bag ). Den indeholder kun én pointer top pointer peger på det øverste element i stakken. Når et element tilføjes i stakken, tilføjes det på toppen af stakken, og elementet kan kun slettes fra stakken. Med andre ord, a stak kan defineres som en beholder, hvori indsættelse og sletning kan udføres fra den ene ende kendt som toppen af stakken.
Nogle nøglepunkter relateret til stak
- Det kaldes som en stak, fordi den opfører sig som en virkelig stak, bunker af bøger osv.
- En stak er en abstrakt datatype med en foruddefineret kapacitet, hvilket betyder, at den kan lagre elementer af en begrænset størrelse.
- Det er en datastruktur, der følger en eller anden rækkefølge for at indsætte og slette elementerne, og den rækkefølge kan være LIFO eller FILO.
Bearbejdning af stak
Stack fungerer på LIFO-mønsteret. Som vi kan se i nedenstående figur er der fem hukommelsesblokke i stakken; derfor er stakkens størrelse 5.
cpp er lig med
Antag, at vi vil gemme elementerne i en stak, og lad os antage, at stakken er tom. Vi har taget stakken i størrelse 5 som vist nedenfor, hvor vi skubber elementerne et efter et, indtil stakken bliver fuld.
Da vores stak er fuld, da størrelsen på stakken er 5. I ovenstående tilfælde kan vi observere, at den går fra toppen til bunden, da vi skulle ind i det nye element i stakken. Stakken bliver fyldt op fra bunden til toppen.
Når vi udfører sletteoperationen på stakken, er der kun én måde at komme ind og ud af, da den anden ende er lukket. Den følger LIFO-mønsteret, hvilket betyder, at den værdi, der blev indtastet først, fjernes sidst. I ovenstående tilfælde indtastes værdien 5 først, så den fjernes først efter sletning af alle de andre elementer.
Standard stak operationer
Følgende er nogle almindelige operationer implementeret på stakken:
PUSH-funktion
De trin, der er involveret i PUSH-operationen, er angivet nedenfor:
- Inden vi indsætter et element i en stak, tjekker vi om stakken er fuld.
- Hvis vi forsøger at indsætte elementet i en stak, og stakken er fuld, så er den flyde over tilstand opstår.
- Når vi initialiserer en stak, sætter vi værdien af top til -1 for at kontrollere, at stakken er tom.
- Når det nye element skubbes ind i en stak, bliver værdien af toppen først forøget, dvs. top=top+1, og elementet vil blive placeret på den nye position af top .
- Elementerne vil blive indsat, indtil vi når max stakkens størrelse.
POP operation
De trin, der er involveret i POP-operationen, er angivet nedenfor:
java oprettelsesliste
- Før vi sletter elementet fra stakken, tjekker vi om stakken er tom.
- Hvis vi forsøger at slette elementet fra den tomme stak, så underløb tilstand opstår.
- Hvis stakken ikke er tom, får vi først adgang til elementet, som peges af top
- Når pop-handlingen er udført, formindskes toppen med 1, dvs. top=top-1 .
Anvendelser af Stack
Følgende er anvendelserne af stakken:
int main() { cout<<'hello'; cout<<'javatpoint'; } < pre> <p>As we know, each program has <em>an opening</em> and <em>closing</em> braces; when the opening braces come, we push the braces in a stack, and when the closing braces appear, we pop the opening braces from the stack. Therefore, the net value comes out to be zero. If any symbol is left in the stack, it means that some syntax occurs in a program.</p> <ul> <tr><td>String reversal:</td> Stack is also used for reversing a string. For example, we want to reverse a ' <strong>javaTpoint</strong> ' string, so we can achieve this with the help of a stack. <br> First, we push all the characters of the string in a stack until we reach the null character. <br> After pushing all the characters, we start taking out the character one by one until we reach the bottom of the stack. </tr><tr><td>UNDO/REDO:</td> It can also be used for performing UNDO/REDO operations. For example, we have an editor in which we write 'a', then 'b', and then 'c'; therefore, the text written in an editor is abc. So, there are three states, a, ab, and abc, which are stored in a stack. There would be two stacks in which one stack shows UNDO state, and the other shows REDO state. <br> If we want to perform UNDO operation, and want to achieve 'ab' state, then we implement pop operation. </tr><tr><td>Recursion:</td> The recursion means that the function is calling itself again. To maintain the previous states, the compiler creates a system stack in which all the previous records of the function are maintained. </tr><tr><td>DFS(Depth First Search):</td> This search is implemented on a Graph, and Graph uses the stack data structure. </tr><tr><td>Backtracking:</td> Suppose we have to create a path to solve a maze problem. If we are moving in a particular path, and we realize that we come on the wrong way. In order to come at the beginning of the path to create a new path, we have to use the stack data structure. </tr><tr><td>Expression conversion:</td> Stack can also be used for expression conversion. This is one of the most important applications of stack. The list of the expression conversion is given below: <pre>Infix to prefix Infix to postfix Prefix to infix Prefix to postfix Postfix to infix</pre> </tr><tr><td>Memory management:</td> The stack manages the memory. The memory is assigned in the contiguous memory blocks. The memory is known as stack memory as all the variables are assigned in a function call stack memory. The memory size assigned to the program is known to the compiler. When the function is created, all its variables are assigned in the stack memory. When the function completed its execution, all the variables assigned in the stack are released. </tr></ul> <hr></'hello';>
'hello';>