
Фото Тобиаса Фишера на Unsplash
Структуры данных: зачем нам это?
Первый шаг к пониманию и совершенствованию алгоритмов — это глубокое знание структур данных. Структуры данных являются основой компьютерных наук и разработки программного обеспечения, и поэтому мы должны хорошо разбираться в основах наиболее распространенных структур данных, чтобы преуспеть в том, что мы делаем.
Хотя это может быть интуитивно понятно, нам будет полезно здесь остановиться и рассмотреть, что такое структура данных на самом деле. На самом базовом уровне структура данных – это способ хранения, организации и управления коллекцией данных. По данным Википедии,
Быстрое погружение в стеки
Фото Тобиаса Фишера на Unsplash

Структуры данных: зачем нам это?
Первый шаг к пониманию и совершенствованию алгоритмов — это глубокое знание структур данных. Структуры данных являются основой компьютерных наук и разработки программного обеспечения, и поэтому мы должны хорошо разбираться в основах наиболее распространенных структур данных, чтобы преуспеть в том, что мы делаем.
Хотя это может быть интуитивно понятно, нам будет полезно здесь остановиться и рассмотреть, что такое структура данных на самом деле. На самом базовом уровне структура данных – это способ хранения, организации и управления коллекцией данных. По данным «Википедии»,
В информатике структура данных – это формат организации, управления и хранения данных, обеспечивающий эффективный доступ и изменение.[1][2][ 3]. Точнее, структура данных — это набор значений данных, взаимосвязей между ними и функций или операций, которые можно применять к данным. [4]
Структуры данных и программная инженерия
Как инженеры-программисты, мы должны иметь полное представление о структурах данных, поскольку, по сути, мы работаем с данными. Глубокое понимание структур данных важно для того, чтобы мы могли выбрать наиболее оптимальную для наших конкретных нужд, не забывая о пространственных и временных сложностях.
Существует множество различных структур данных, каждая из которых имеет свои преимущества и недостатки в различных сценариях. Хотя многие из нас к настоящему времени уже хорошо знакомы со многими из этих структур данных, я подумал, что для многих из нас (включая меня) может оказаться полезным просмотреть некоторые из них.
Стеки
Фото автора «Prateek Katyal» на «Unsplash»

стек — это линейная структура данных, которая следует определенному порядку выполнения операций (GeeksforGeeks). Стеки работают по принципу Последним пришел — первым ушел (LIFO). Это означает, что элемент, который добавляется последним (тот, что находится наверху стека), удаляется первым. Вставка и удаление элементов может происходить только в верхней части стека.
Когда вы думаете о структуре данных стека, полезно думать о стопке книг. Представьте, что у нас есть стол со стопкой книг. Если мы хотим добавить книгу в стопку, мы поместим ее на вершину стопки. И наоборот, если бы мы решили удалить книгу из стопки, нам пришлось бы начать с удаления книги с вершины стопки, то есть с той, которую мы только что добавили в стопку.
«Источник: Точка туториалов»

Операции со стеком
Если мы хотим добавить элемент в стек, мы можем использовать функцию push(), чтобы сделать это в верхней части стека. И наоборот, если мы хотим удалить верхний элемент из стека, мы используем функцию pop(), которая возвращает верхний элемент.
Помимо вышеупомянутых функций, мы также можем использовать функцию top()/peek(), которая возвращает самый верхний элемент, что позволяет нам просматривать его, не удаляя. У нас также есть метод isEmpty(), который проверяет, пуст ли стек, и метод isFull(), который проверяет, заполнен ли стек.
Как реализованы стеки?
Стеки реализуются с использованием массивов или связанных списков. Каждая из этих реализаций имеет свои сильные и слабые стороны.
Массивы обеспечивают быстрый и простой доступ и поиск информации, но имеют фиксированный размер. Массивы позволяют нам использовать индексы для нацеливания на определенный элемент. С другой стороны, связанные списки являются динамическими, что позволяет легко добавлять и удалять элементы. Тем не менее, это довольно громоздко и своевременно (время O(N)), чтобы пройти через связанный список и получить доступ к нужному элементу.
Для более подробного ознакомления с преимуществами и недостатками массивов по сравнению со связанными списками я бы рекомендовал ознакомиться с этой замечательной статьей GeeksforGeeks.
Каковы некоторые приложения стеков?
Стеки наиболее полезны, когда важен порядок выполняемых действий. Некоторыми реальными примерами того, когда стеки могут быть полезны, являются обращение некоторого вида ввода (например, строки) и реализация функций отмены/повторения.
Структуры мира данных: стеки