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

Это не то, к чему я когда-либо возвращался со времен колледжа, и если вы не имеете опыта работы в CompSci/IT, скорее всего, вам никогда не приходилось этому учиться.

Изучение основ структур данных и алгоритмов гарантированно сделает вас лучшим программистом и, что более важно, улучшит ваши навыки критического мышления и подход к решению проблем.

В этой статье я представлю введение вместе с примерами кода и, наконец, реализацией вопросов, связанных со стеками, на Python.

Что такое стек?

Вы можете думать о стопке как о стопке тарелок (или как о стопке книг, которые я еще не успел прочитать). Я продолжаю добавлять новые книги в верхнюю часть стопки. Когда я хочу добраться до книги, мне нужно убрать книгу сверху.

  • Стек — это тип линейной структуры данных, в которой хранится набор элементов (это могут быть целые числа, символы, логические значения, числа с плавающей запятой и т. д.).
  • Элементы добавляются и удаляются с одного и того же конца, который называется «вершиной» стека.
  • Он следует правилу LIFO (последним пришел — первым ушел) для добавления и удаления элементов. Это означает, что первый элемент, который будет добавлен в стек, будет последним элементом, который будет удален, а последний добавленный элемент будет удален первым.
  • Двумя основными операциями со стеком являются «push» и «pop».
  • Операция push вставляет элемент на вершину стека.
  • Операция pop удаляет верхний элемент из стека.

Реализация стека в Python

Во-первых, нам нужно определить класс и реализовать некоторые основные методы. Здесь мы создаем класс под названием «Стек» и используем примитивный тип данных Python «список» для хранения элементов нашего стека.

Для реализации операций push и pop мы используем встроенные в python методы append() и pop(). соответственно.

Операция peek полезна для возврата верхнего элемента стека без его удаления. Здесь stack[-1] возвращает последний элемент списка.

Метод size() возвращает размер стека, а метод isEmpty() возвращает True, если стек пуст и False если он содержит хотя бы один элемент.

И вот оно! Структура данных стека в python. Затем мы можем использовать их в классе Stack следующим образом:

Вопросы о стеках

Вот несколько проблем с кодированием, связанных со стеками. Я буду обновлять ответы в ближайшее время.

  1. Как можно использовать один массив для реализации трех стеков?
  2. Как бы вы спроектировали стек, в котором, помимо push и pop, есть функция min, возвращающая минимальный элемент? Push, pop и min должны работать за 0(1) раз.
  3. Учитывая цепочки скобок, определите, сбалансирована ли каждая последовательность скобок.

Решения

Как можно использовать один массив для реализации трех стеков?

Как бы вы спроектировали стек, в котором, помимо push и pop, есть функция min, возвращающая минимальный элемент? Push, pop и min должны работать за 0(1) раз.

Учитывая цепочки скобок, определите, сбалансирована ли каждая последовательность скобок.