Стек — це лінійна структура даних, яка слідує за LIFO (останній прийшов - перший вийшов) принцип. Стек має один кінець, тоді як Черга має два кінці ( передній і задній ). Він містить лише один покажчик верхній покажчик вказуючи на найвищий елемент стека. Щоразу, коли елемент додається в стек, він додається на вершину стека, і елемент можна видалити лише зі стеку. Іншими словами, а стек можна визначити як контейнер, у якому вставлення та видалення можна виконувати з одного кінця, відомого як вершина стеку.
Деякі ключові моменти, пов'язані зі стеком
- Його називають стеком, тому що він поводиться як справжній стек, стоси книг тощо.
- Стек — це абстрактний тип даних із заздалегідь визначеною ємністю, що означає, що він може зберігати елементи обмеженого розміру.
- Це структура даних, яка дотримується певного порядку вставки та видалення елементів, і цей порядок може бути LIFO або FILO.
Робота стека
Стек працює за шаблоном LIFO. Як ми бачимо на малюнку нижче, у стеку п’ять блоків пам’яті; отже, розмір стека дорівнює 5.
вікно попередження javascript
Припустімо, що ми хочемо зберегти елементи в стеку, і цей стек порожній. Ми взяли стек розміром 5, як показано нижче, в якому ми просуваємо елементи один за одним, доки стек не заповниться.
Оскільки наш стек заповнений, оскільки розмір стека дорівнює 5. У наведених вище випадках ми можемо помітити, що він рухається зверху вниз, коли ми вводили новий елемент у стек. Стек заповнюється знизу до верху.
Коли ми виконуємо операцію видалення в стеку, є лише один шлях для входу та виходу, оскільки інший кінець закрито. Він відповідає шаблону LIFO, що означає, що значення, введене першим, буде видалено останнім. У наведеному вище випадку спочатку вводиться значення 5, тому воно буде видалено лише після видалення всіх інших елементів.
Стандартні операції зі стеком
Нижче наведено деякі типові операції, реалізовані в стеку:
java версія linux
Операція PUSH
Нижче наведено етапи виконання операції PUSH:
- Перед тим, як вставити елемент у стек, ми перевіряємо, чи заповнений стек.
- Якщо ми спробуємо вставити елемент у стек, і стек заповнений, тоді перелив виникає стан.
- Коли ми ініціалізуємо стек, ми встановлюємо значення top як -1, щоб перевірити, чи стек порожній.
- Коли новий елемент поміщається в стек, спочатку збільшується значення вершини, тобто top=top+1, і елемент буде розміщено на новій позиції зверху .
- Елементи вставлятимуться, доки ми не досягнемо макс розмір стопки.
Операція POP
Нижче наведено кроки, пов’язані з операцією POP.
- Перед видаленням елемента зі стека ми перевіряємо, чи стек порожній.
- Якщо ми спробуємо видалити елемент із порожнього стеку, то недоплив виникає стан.
- Якщо стек не порожній, ми спочатку отримуємо доступ до елемента, на який вказує зверху
- Після виконання операції висунення вершина зменшується на 1, тобто top=top-1 .
Застосування Stack
Нижче наведено програми стека:
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';>