Алгоритм на стеках

#algorithm #data-structures #stack

#алгоритм #структуры данных #стек

Вопрос:

используя следующий алгоритм

 Begin  
    Initialize Stacks S1,S2
    Push all elements into Stack S1

Procedure P(){
    While(!S1.isEmpty())
    PushS2(PopS1())

}
While(!s2.isEmpty())
    Print(popS2())
End
 

Затем он задает вопрос, для чего предназначен приведенный выше псевдокод?Что делает приведенный выше алгоритм работы.

Я понимаю, как работают стеки. И здесь все это распечатывает то же самое, что было задано в качестве входных данных.Если a,b,c,d,e был введен, то он будет распечатан a,b,c,d,e .

Представляет ли этот алгоритм что-нибудь существенное.Какая польза от написания такого рода?

Комментарии:

1. Что P делает определение процедуры в середине блока? Для меня это не имеет смысла. (Можно даже утверждать, что это был бы недопустимый синтаксис, даже в псевдокоде.) Это весь вопрос или P используется в другом месте?

2. @Heuster Это был заданный алгоритм, и в этом весь вопрос

Ответ №1:

P() выталкивает все из S1 в S2 , выталкивая все из S1 и S2 помещая в него, пока стек не станет пустым, а завершающий while цикл печатает все в S2, пока оно не станет пустым… Это кажется довольно простым, если я чего-то не упускаю.

push() добавляет элемент в стек.

pop() возвращает верхний элемент из стека.

Комментарии:

1. : Я понимаю, что происходит . Я не знаю, какой ответ я должен дать на вопрос, для чего предназначен приведенный выше псевдокод? Что делает приведенный выше алгоритм работы.

2. @sam_rox скопируйте один стек в другой стек и распечатайте то, что находится в стеке… Это также изменит то, что находится в S1 … может быть, это то, что вы ищете

3. : Это не отменяется, как только s2 появляется правильно? В s2 мы имеем перевернутый стек. Но когда он выталкивается, он больше не отменяется

4. Ну, это зависит от того, как инициализируются числа S1 и S2, но да