2016-12-04 20 views
0

如果我在堆栈中存储数字,并且想要在队列中打印它,我是否应该再次在队列中存储相同的数字以打印它,或者有另一种方法可以执行它呢?在堆栈中存储一个数字并将其打印在队列中

import java.util.Stack; 
import java.util.PriorityQueue; 
import java.util.Scanner ; 

public class Qa { 

    public static void main(String[] args) { 

     Scanner input = new Scanner (System.in); 

     Stack<Integer> A =new Stack<Integer>(); 

     System.out.println(" the numbers should be less than 99 "); 
     int x = input.nextInt() ; 

     while(x> 0 && x < 99){ 

      A.push(x); 


     } 

     PriorityQueue<String> B =new PriorityQueue<String>(); 


    } 

回答

2

队列基本上是FIFO。首先将元素存储在堆栈中。弹出元素并将其存储在另一个堆栈中。现在弹出你将它作为FIFO(队列)的元素。

+0

非常感谢:) – alex213

0

您可以使用堆栈的内容初始化列表,然后从列表中打印?您可以从列表中的最后一个元素打印到第一个

0

我不知道您具体要做什么,但是如果您存储了该号码,则无需再次重新存储。你可以从[first - > last]或[last - > first]中选择。 一个与代码示例是在这里:

与你节省内存和时间。 :)

0

假设您利用堆栈结构出于某种原因,但结果可能相同,将数据存储在一个简单的列表中,然后根据您想要执行的操作使用该列表。您可以节省空间和时间,因为不需要复制数据或在复杂的数据结构上进行不必要的循环。 希望这有助于。

+0

我没有使用列表,因为问题说:数组,列表,API类和任何其他数据结构不允许:) – alex213

+0

感谢您分享您的时间:) – alex213

0

java.util.Stack它是一个订购Iterable喜欢List。您可以通过使用for循环(或Java中的.forEach)迭代堆栈来按顺序获取元素。

我粘贴下面的示例代码和输出:

public class MyApp { 
    public static void main(String[] args) { 
    Stack<Integer> myInts = new Stack<>(); 

    for (int i = 0; i < 5; i++) { 
     myInts.push(i); 
    } 

    System.out.println("ITERATING:"); 

    myInts.forEach(System.out::println); 

    System.out.println("\nPOPPING:"); 

    while(!myInts.isEmpty()) { 
     System.out.println(myInts.pop()); 
    } 
    } 
} 

输出是:

ITERATING: 
0 
1 
2 
3 
4 

POPPING: 
4 
3 
2 
1 
0 

你看,如果你遍历Stack它的顺序返回号码插入。如果您的意图只是打印堆栈的内容,则此方法具有通过调用pop()而不必变更堆栈的额外好处。