Java: Как создать стек, используя интерфейс очереди?

1

У меня есть функция, которая принимает Queues, и я хотел бы выполнять операции над ними, как Stack. К сожалению, методы ArrayDeque, такие как addFirst, не отображаются в интерфейсе Queue, поэтому я не могу их использовать. Есть ли способ выполнить операции стека в очереди?

Благодарю!

  • 0
    проблема в том, что интерфейс Queue не указывает, вставляются ли данные в начало или в конец. Следовательно, вы не можете знать, что вы действительно делаете в очереди.
  • 0
    Проблема в том, что очередь не является стеком. FIFO против LIFO. Какова убедительная причина, по которой вы не используете очередь для своей очереди?
Теги:
stack
queue

2 ответа

0
Лучший ответ

Там есть! Отметьте asLifoQueue(Deque<T> deque) в классе Collections. https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#asLifoQueue(java.util.Deque)

Возвращает представление Deque как очереди Last-in-first-out (Lifo). Метод add сопоставляется для push, remove отображается в pop и так далее. Это представление может быть полезно, если вы хотите использовать метод, требующий очереди, но вам нужно упорядочить Lifo.

Он возвращает новый класс, который реализует интерфейс Queue, за исключением повторения привязки методов Queue к соответствующим методам в Deque, чтобы он функционировал как стек LIFO!

Библиотека Java полна волшебных вещей, если вы их ищете!

  • 0
    Эй, как удобно! Благодарю.
  • 0
    но это требует Deque
0

ПРИМЕЧАНИЕ. Если вы не можете использовать подход OO, как показано ниже, просто очередь, подобную q, и управлять очередью, как показано ниже.

Если вам нужно использовать Очередь, это достойное решение, хотя гораздо лучшим подходом будет для нас класс Stack или реализация Stack с использованием других структур данных.

public class MyStack<T> {

/**
 * @param args
 */
private Queue<T> q = new LinkedList<T>();
public MyStack(){
}
public static void main(String[] args) {
    MyStack<String> s = new MyStack<String>();
    s.push("1");
    s.push("2");
    s.push("3");
    s.push("4");
    System.out.println(s.pop());
    System.out.println(s.pop());
    System.out.println(s.pop());
    System.out.println(s.pop());
    System.out.println(s.pop());
}

public void push(T s){
    q.offer(s);         
}

public T pop(){
    int n = q.size();
    for(int i = 0; i < n-1; i++){
        q.offer(q.poll());              
    }
    return q.poll();
}
}

Вывод:
4
3
2
1
ноль

  • 0
    проблема в том, что MyStack больше не является ни стеком, ни MyStack .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню