如何在 Java 中反转堆栈和队列的顺序

How to reverse order Stack and Queue in Java

我想在 Java 中使用堆栈和队列反转输出顺序。

这是我的代码:

import java.util.*;

public class Books {
    public static void main(String[] args) {
        Queue<String> book = new LinkedList<String>();
        Stack<String> Title = new Stack<>();
        Scanner user = new Scanner(System.in);

        System.out.println("Enter four book titles.");
        int b = 4;
        for (int i = 1; i <= b; i++) {
            System.out.print("Book " + i + ": ");
            String Enter = user.nextLine();
            book.offer(Enter);
        }

        System.out.println("New order of books:");
        System.out.println(book);

    }
}

这是这段代码的输出。

Enter four book titles.
Book 1: wew1
Book 2: wew2
Book 3: wew3
Book 4: wew4
New order of books:
[wew1, wew2, wew3, wew4]

我想做的是按相反的顺序进行。但是我不知道怎么办。

您可以尝试在 Queue 中添加书籍并将它们添加到 Stack 然后使用 pop() 操作打印。

如果您想使用 Stack

,建议使用 ArrayDeque 实现
    public static void main(String[] args) {
        Queue<String> queue = new LinkedList<>();
        Scanner user = new Scanner(System.in);

        System.out.println("Enter four book titles.");
        int b = 4;
        for (int i = 1; i <= b; i++) {
            System.out.print("Book " + i + ": ");
            String Enter = user.nextLine();
            queue.add(Enter);
        }

        ArrayDeque<String> stack = new ArrayDeque<>();
        while (!queue.isEmpty()) {
            stack.push(queue.poll());
        }

        System.out.println("New order of books:");
        while (!stack.isEmpty()) {
            System.out.print(stack.pop()+" ");
        }
        user.close();
    }

output

Enter four book titles.
Book 1: wew1
Book 2: wew2
Book 3: wew3
Book 4: wew4
New order of books:
wew4 wew3 wew2 wew1

利用LinkedList implements Deque (double-ended queue). Note that Deque also implements Queue(单端队列)的优势。

您可以使用方法Deque#offerFirst(E e)将书插入队列的开头。之后不需要反转这样的队列。最小示例:

Deque<String> queue = new LinkedList<>();
        
for (int i = 1; i <= 4; i++){
    queue.offerFirst("book" + i);
}

System.out.println("Reversed order of books:");
System.out.println(queue);

Output:

Reversed order of books:
[book4, book3, book2, book1]

注1:只要不需要通过索引访问就可以考虑使用ArrayDeque instad of LinkedList

注2:不要用Stack只要是考虑obsolete and deprecated.