Как изменить стек абстрактных типов данных (ADT)? - PullRequest
0 голосов
/ 08 октября 2019

Используя определение интерфейса стека, какая строка находится вверху стека, а какая строка внизу?

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

Мне также нужна помощь в строке с именем String name = stringStack.pop ();

StackInterface<String> stringStack = new MyStack<>(); 

stringStack.push( “Jane” ); 
stringStack.push( “Jess” ); 
stringStack.push( “Jill” ); 
stringStack.push( stringStack.pop()); 
stringStack.push( stringStack.peek()); 
stringStack.push( “Jim” ); 
String name = stringStack.pop(); 
stringStack.push( stringStack.peek());

Я ожидаю, что порядок будет:

TOP Джим Джим ДжиллДжилл Джесс Джейн Дно

1 Ответ

0 голосов
/ 08 октября 2019

В такой ситуации:

stringStack.push( stringStack.pop()); 

Вам просто нужно помнить, что push должен знать, какое значение нажать, прежде чем оно будет выдвинуто. Как он знает, какую ценность нажать? Оценка pop(), конечно! Таким образом, предмет выталкивается первым, затем push знает, какой предмет нажать, и отталкивает назад. Другими словами, A pop внутри push в целом ничего не делает со стеком.

Как насчет:

stringStack.push( stringStack.peek());

Вместо того, чтобы откинуть верхний элемент и затем оттолкнуть его,это будет только смотреть на верхний элемент, а затем помещать его в стек. В общем, это просто «копирование» верхнего элемента.

Вот как выглядит стек после каждой строки (слева вверху):

stringStack.push( “Jane” ); 
// Jane
stringStack.push( “Jess” ); 
// Jess Jane
stringStack.push( “Jill” ); 
// Jill Jess Jane
stringStack.push( stringStack.pop()); 
// Jill Jess Jane
stringStack.push( stringStack.peek()); 
// Jill Jill Jess Jane
stringStack.push( “Jim” ); 
// Jim Jill Jill Jess Jane
String name = stringStack.pop(); 
// Jill Jill Jess Jane
stringStack.push( stringStack.peek());
// Jill Jill Jill Jess Jane
...