Реализация minstack с двумя стеками, которая не работает в состоянии Pop - PullRequest
0 голосов
/ 05 ноября 2018

Я реализую алгоритм minstack и что-то странное. Может быть, мне здесь не хватает «какой-то концепции стека» или «некоторой концепции Java». Я использую два стека (st и st2) для выполнения операций minstack. Ниже мой метод pop, который терпит неудачу при условии if:

Метод 1 - СБОЙ:

public void pop() {
        if(st.pop() == st2.peek())
            st2.pop();
    }

Ниже приведен метод Pop, который отлично работает, когда я сохраняю st.pop (), в результате получается переменная 'a':

Метод 2 - ПРОХОДЫ:

public void pop() {
    int a = st.pop();
    if(a == st2.peek())
        st2.pop();
}

Пожалуйста, предположим, что в стеке есть целочисленные элементы, и значение из st.pop() равно st2.peek(). Я хотел бы понять разницу в том, почему st.pop() не будет работать, если состояние метода 1 и работает в методе 2 после сохранения результатов st.pop() во временной переменной a

1 Ответ

0 голосов
/ 05 ноября 2018

Если я правильно понял вопрос, st.pop() не работает в первом методе, потому что тип элементов в st никогда не указывается явно (т. Е. St может быть инициализирован как Stack st = new Stack();).

В результате любой объект (не обязательно должен быть int) может быть помещен в стек, поэтому, когда стек выталкивается, неясно, какой тип данных возвращается, что приводит к сбою оператора if.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...