Рубрики
Без рубрики

Структуры данных: стеки

На этой неделе в нашей серии структуры данных. Мы решаем стек. Таблица … Помечена начинающими, компьютером, алгоритмами, Python.

Структуры данных и алгоритмы (10 серии деталей)

На этой неделе в нашей серии структуры данных.

Мы справляемся с стек Анкет

Оглавление

  • Что такое стек?
  • Реализация
  • Сложность
  • Реальная жизнь использования
  • Вывод

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

Стек-это линейная структура данных, которая хранит элементы в последнем/первом (LIFO). В стеке, вставка и удаление происходят на том же конце под названием «Верхняя часть стека».

Это похоже на кучу тарелок или колоду карт. Например, в куче тарелок вы можете:

  1. Положите новую тарелку на вершине
  2. Снимите верхнюю пластину

Если вы хотите снять пластину внизу, то вам придется удалить все пластины сверху. Следовательно, почему это называется Последний-в/Первый выход Анкет

Методы

В конце дня стек – это Аннотация тип данных это означает, что он может быть реализован разными способами, но все они должны соблюдать одну и ту же общую функциональность.

  1. Push : добавить элемент в стек
  2. Поп : Удалите самый максимальный элемент в стеке
  3. isempty : Проверяет, пуст ли стек
  4. полон : проверяет, заполнен ли стек
  5. Peek : Получает самый лучший элемент, не удаляя его

Реализация

Как мы уже говорили выше, стеки могут быть реализованы в основном двумя способами:

  1. Множество
  2. Связанный список

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

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

Теперь мы пройдем обе реализации.

Множество

Для простоты мы будем использовать массив фиксированного размера.

class Stack: 
    items = [];

    def __init__(self):
        self.items = []

    def  push(self, element): 
        self.items.append(element) 

    def  pop(self): 
        if len(self.items) == 0:
            print('Can not pop form an empty list')
        self.items.pop();
        print('Last item has been poped from the list')

    def isEmpty(self):
        print(len(self.items) == 0)

    def peek(self):
        if len(self.items) == 0:
            print('Stack is Empty')
        print(self.items[len(self.items) - 1]) ;

Связанный список

class Node:

    # Class to create nodes of linked list
    # constructor initializes node automatically
    def __init__(self,data):
        self.data = data
        self.next = None

class Stack:

    # head is default NULL
    def __init__(self):
        self.head = None

    # Checks if stack is empty
    def isempty(self):
        if self.head == None:
            return True
        else:
            return False

    # Method to add data to the stack
    # adds to the start of the stack
    def push(self,data):

        if self.head == None:
            self.head=Node(data)

        else:
            newnode = Node(data)
            newnode.next = self.head
            self.head = newnode

    # Remove element that is the current head (start of the stack)
    def pop(self):

        if self.isempty():
            return None

        else:
            # Removes the head node and makes 
            #the preceeding one the new head
            poppednode = self.head
            self.head = self.head.next
            poppednode.next = None
            return poppednode.data

    # Returns the head node data
    def peek(self):

        if self.isempty():
            return None

        else:
            return self.head.data

Сложность

Толкать

Поскольку у нас есть прямой доступ к началу нашего массива или связанного списка, мы можем напрямую добавить в список. Делать это временной сложностью O (1)

Поп

То же самое с толчком, мы просто удаляем с самого наилучшего элемента, который у нас есть прямой доступ к верхней части стека. Делать это временной сложностью O (1)

Заглядывать

У нас есть доступ к вершине стека, так что это также O (1)

Поиск

Для поиска нам придется пройти последовательно каждый элемент, делая его O (n)

Реальная жизнь использования

1. Кнопка назад/вперед в веб -браузерах

Стек используется в кнопках сзади и вперед веб-браузеров.

  • Когда мы переходим с одной страницы на другую, эти страницы помещаются в стек
  • URL -адреса веб -сайта хранятся в стеке
  • Текущая страница размещена в верхней части стека
  • Когда мы нажимаем кнопку «Назад», что элементы начинают появляться и отображать результат в обратном порядке.
  • Таким образом, стек используется в кнопке прямого и обратного веб -браузера

Пса Это метод также используется в технических редакторах для механизма Undo/Redo.

2. В компиляторах

Компиляторы используют стек для расчета значения выражений, таких как 2 + 4/5 * (7 - 9) преобразуя выражение в префикс или форму постфикса.

3. Чтобы изменить слово

Поместите все буквы в стек и выскажите их. Из -за порядок LIFO стека вы получите буквы в обратном порядке.

Вывод

В итоге:

  1. Стек-это линейная структура данных, которая хранит элементы в последнем/первом (LIFO).
  2. В стеке, вставка и удаление происходят на том же конце под названием «Верхняя часть стека».
  3. Три основные функции стека – толкать , тянуть и Peek Анкет

Я надеюсь, что у вас есть что -то из этого поста, и если у вас есть какие -либо вопросы, не стесняйтесь оставить их внизу.

Структуры данных и алгоритмы (10 серии деталей)

Оригинал: “https://dev.to/tamerlang/data-structures-stacks-578b”