Files
freeCodeCamp/guide/russian/computer-science/data-structures/stacks/index.md
Randell Dawson 0a1eeea424 fix(guide) Replace invalid prism code block names (#35961)
* fix: replace sh with shell

fix replace terminal with shell

fix replace node with js

fix replace output with shell

fix replace cs with csharp

fix replace c++ with cpp

fix replace c# with csharp

fix replace javasctipt with js

fix replace syntax  with js

fix replace unix with shell

fix replace linux with shell

fix replace java 8 with java

fix replace swift4 with swift

fix replace react.js with jsx

fix replace javascriot with js

fix replace javacsript with js

fix replace c++ -  with cpp

fix: corrected various typos

fix: replace Algorithm with nothing

fix: replace xaml with xml

fix: replace solidity with nothing

fix: replace c++ with cpp

fix: replace txt with shell

fix: replace code with json and css

fix: replace console with shell
2019-05-15 19:08:19 +02:00

4.2 KiB
Raw Blame History

title, localeTitle
title localeTitle
Stacks Стеки

Стеки

Стеки представляют собой структуру данных First In Last Out (FILO). Это линейная структура данных.

Вы можете представить себе стопку, как тарелки были организованы в ресторане "шведский стол". Вы можете выбрать только тарелку сверху, иначе стек рухнет. Как правило, последний элемент, который нужно вставить, будет удален первым.

Некоторые основные операции стека:

  1. Push - Вставляет элемент вверху стека.
  2. Pop - Удаляет элемент в верхней части стека.
  3. isEmpty - проверить, пуст ли пуст или нет.
  4. Размер. Возвращает количество элементов в стеке. (Все операции могут выполняться в O (1) раз)

Реализация стека возможна с использованием массивов или связанных списков. Ниже приведена простая реализация массива структуры данных стека с наиболее распространенными операциями.

//Stack implementation using array in C++ 
 //You can also include<stack> and then use the C++ STL Library stack class. 
 
 #include <bits/stdc++.h> 
 
 using namespace std; 
 
 class Stack { 
    int t; 
    int arr[MaxN]; 
 public: 
    Stack() { 
        t = 0; 
    } 
    int size() { 
        return t; 
    } 
    bool isEmpty() { 
        return t < 1; 
    } 
    int top() { 
        return arr[t]; 
    } 
    void push(int x) { 
        if (++t >= MaxN) { 
            cout << "Stack is full" << '\n'; 
            return; 
        } 
        arr[t] = x; 
    } 
    void pop() { 
        arr[t--] = 0; 
    } 
 }; 
 
 int main() { 
    Stack st; 
 
    st.push(4); 
    st.push(3); 
    st.push(5); 
    while (!st.isEmpty()) { 
        cout << st.size() << ' ' << st.top() << '\n'; 
        st.pop(); 
    } 
    return 0; 
 } 

Использование массивов в виде стеков

В некоторых языках программирования массив имеет функциональность стека, что позволяет разработчику выполнять операции push и pop без необходимости создания структуры данных пользовательского стека.

Например, массив в JavaScript имеет методы push и pop, позволяющие легко реализовать функциональность стека в приложении.

stack = []; 
 
 let i = 0; 
 while(i < 5) 
  stack.push(i++); 
 
 while(stack.length) { 
  stack.pop(); 
 } 

Список в Python также может выполнять функции стека в приложении. Вместо push можно использовать метод append .

stack = [] 
 
 for i in range(5): 
    stack.append(i) 
 
 while len(stack): 
    stack.pop() 

Приложения

  • Поверните рекурсию в цикл.
  • Функции Redo-Undo.
  • Судоку-решатель
  • Глубина первого поиска.
  • Обходы деревьев
  • Выражение Infix -> Префикс / Постфиксное выражение
  • Действительные скобки

Дополнительная информация: