Реализация стека с использованием двух очередей - PullRequest
134 голосов
/ 27 марта 2009

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

Учитывая две очереди со своими стандартными операциями (enqueue, dequeue, isempty, size), реализовать стек со своими стандартными операциями (pop, push, isempty, size).

Должно быть двух версий решения.

  • Версия A : стек должен быть эффективен при нажатии на предмет; и
  • Версия B : стек должен быть эффективен при вытягивании предмета.

Мне интересен алгоритм больше, чем какой-либо конкретной языковой реализации. Тем не менее, я приветствую решения, выраженные на знакомых мне языках (, , , , ).

Ответы [ 21 ]

0 голосов
/ 13 марта 2012

Вот еще одно решение:

для PUSH: -Добавить первый элемент в очередь 1. -При добавлении второго элемента и так далее, Сначала поместите элемент в очередь 2, а затем скопируйте весь элемент из очереди 1 в очередь 2. -Для POP просто удалите элемент из очереди, из которого вы вставили последний элемент.

Итак,

public void push(int data){
if (queue1.isEmpty()){
    queue1.enqueue(data);
}  else {
queue2.enqueue(data);
while(!queue1.isEmpty())
Queue2.enqueue(queue1.dequeue());
//EXCHANGE THE NAMES OF QUEUE 1 and QUEUE2

} }

public int pop(){
int popItem=queue2.dequeue();
return popItem;
}'

Есть одна проблема, я не могу понять, как переименовать очереди ???

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