Stack je lineární datová struktura, která následuje LIFO (Last-In-First-Out) zásada. Zásobník má jeden konec, zatímco fronta má dva konce ( přední a zadní ). Obsahuje pouze jeden ukazatel horní ukazatel ukazující na nejvyšší prvek zásobníku. Kdykoli je prvek přidán do zásobníku, je přidán na vrchol zásobníku a prvek lze odstranit pouze ze zásobníku. Jinými slovy, a stoh lze definovat jako kontejner, do kterého lze vkládání a vymazávání provádět z jednoho konce známého jako horní část stohu.
Některé klíčové body související se zásobníkem
- Říká se mu zásobník, protože se chová jako zásobník v reálném světě, hromady knih atd.
- Zásobník je abstraktní datový typ s předem definovanou kapacitou, což znamená, že může ukládat prvky omezené velikosti.
- Jedná se o datovou strukturu, která se řídí určitým pořadím pro vkládání a odstraňování prvků, přičemž toto pořadí může být LIFO nebo FILO.
Práce se zásobníkem
Stack funguje na vzoru LIFO. Jak můžeme vidět na obrázku níže, v zásobníku je pět paměťových bloků; proto je velikost zásobníku 5.
cout
Předpokládejme, že chceme uložit prvky do zásobníku a předpokládejme, že zásobník je prázdný. Vzali jsme stoh velikosti 5, jak je znázorněno níže, ve kterém tlačíme prvky jeden po druhém, dokud se hromádka nezaplní.
Vzhledem k tomu, že náš zásobník je plný, protože velikost zásobníku je 5. Ve výše uvedených případech můžeme pozorovat, že to jde shora dolů, když jsme zadávali nový prvek do zásobníku. Zásobník se plní odspodu nahoru.
Když provádíme operaci odstranění na zásobníku, existuje pouze jeden způsob vstupu a výstupu, protože druhý konec je uzavřen. Řídí se vzorem LIFO, což znamená, že hodnota zadaná jako první bude odstraněna jako poslední. Ve výše uvedeném případě se nejprve zadá hodnota 5, bude tedy odstraněna až po smazání všech ostatních prvků.
f-string python
Standardní operace zásobníku
Níže jsou uvedeny některé běžné operace implementované v zásobníku:
Provoz PUSH
Kroky zahrnuté v operaci PUSH jsou uvedeny níže:
- Před vložením prvku do zásobníku zkontrolujeme, zda je zásobník plný.
- Pokud se pokusíme vložit prvek do zásobníku a zásobník je plný, pak přetékat nastane stav.
- Když inicializujeme zásobník, nastavíme hodnotu top na -1, abychom zkontrolovali, zda je zásobník prázdný.
- Když je nový prvek vložen do zásobníku, nejprve se zvýší hodnota vrcholu, tj. top=top+1, a prvek bude umístěn na novou pozici horní .
- Prvky budou vkládány, dokud nedosáhneme max velikost zásobníku.
Operace POP
Kroky zahrnuté v operaci POP jsou uvedeny níže:
- Před vymazáním prvku ze zásobníku zkontrolujeme, zda je zásobník prázdný.
- Pokud se pokusíme odstranit prvek z prázdného zásobníku, pak se podtékání nastane stav.
- Pokud není zásobník prázdný, přistoupíme nejprve k prvku, na který ukazuje horní
- Po provedení operace pop se horní část sníží o 1, tj. top=top-1 .
Aplikace Stack
Následují aplikace zásobníku:
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';>