【问题标题】:Java - Implementing a Queue into a Stack?Java - 将队列实现为堆栈?
【发布时间】:2015-11-27 10:44:25
【问题描述】:

我创建了下面的代码,我的意思是不实现堆栈和队列。现在我已经实现了堆栈,因为我认为我实现了一个队列,所以我想知道在哪里以及如何实现一个队列。请记住,我必须使用队列来提供堆栈,但我似乎已经绕过了:)

非常感谢任何帮助!

package stackandqueue;


import java.util.*;
import java.util.Stack;
import java.util.Queue;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.LinkedList;
import java.util.StringTokenizer;
import java.util.Arrays;

public class StackAndQueue 
{

public static void main(String[] args) throws IOException 
{
// Create three empty stacks of Bays.
// Bay 1 linked list
Queue<String> bayoneStack = new LinkedList<String>();
// Bay 2 linkd list.
Queue<String> baytwoStack = new LinkedList<String>();
// Bay 3 linked list
Queue<String> baythreeStack = new LinkedList<String>();


Queue<String> bayloadStack = new LinkedList<String>();



System.out.println("***********************************************");

// Open and read text file
String inputFileName = "PodData4.txt";
FileReader fileReader = new FileReader("PodData4.txt");

// Create the FileReader object
try (BufferedReader br = new BufferedReader(fileReader);)
{    
// Sort the data into the relevant linked list by type F, T or P.
String[] strings = br.readLine().split(",");
for (String str : strings)
{
    switch (str.charAt(0))
    {
        case 'F':
            bayoneStack.add(str);
            break;
        case 'T':
            baytwoStack.add(str);
            break;
        case 'P':
            baythreeStack.add(str);
            break;
        default:
            // In-case of invalid input

    }

    System.out.println(str);



}
} 
catch(IOException ex)
{
//handle exception;
}
finally
{
fileReader.close();
}
// Prints out the linked list stacks showing all Bays.
System.out.println("***********************************************");

System.out.println("Bay 1:Food: " + bayoneStack.toString());
System.out.println("Bay 2:Technical: " + baytwoStack.toString());
System.out.println("Bay 3:Personal: " + baythreeStack.toString());

}
}

【问题讨论】:

  • 你能修复你的缩进吗?
  • 请提出一个明确、具体的问题。你想让我做什么?您期望某个输入的输出是什么?什么是“F”、“T”和“P”?
  • 好的,所以我得到了我想要的输出(如下所示),但我需要在代码中实现一个队列。但我不知道在哪里实现它。海湾 1:食品:[F99、F14、F58、F77、F63、F53] 海湾 2:技术:[T16、T17、T63、T99、T88、T02] 海湾 3:个人:[P34、P88、P02、P76、 P14, P24]

标签: java linked-list stack queue


【解决方案1】:

您可以利用 LinkedList 实现了 Queue 接口这一事实:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.LinkedList;
import java.util.Queue;

public class Test {

  public static void main( String[] args ) throws IOException {
    // Create three empty stacks of Bays.
    // Bay 1 linked list
    Queue<String> bayoneStack = new LinkedList<String>();
    // Bay 2 linkd list.
    Queue<String> baytwoStack = new LinkedList<String>();
    // Bay 3 linked list
    Queue<String> baythreeStack = new LinkedList<String>();

    // Open and read text file
    String inputFileName = "PodData4.txt";
    FileReader fileReader = new FileReader( inputFileName );

    // Create the FileReader object
    try ( BufferedReader br = new BufferedReader( fileReader ); ) {
      // Sort the data into the relevant linked list by type F, T or P.
      String[] strings = br.readLine().split( "," );
      for ( String str : strings ) { 
        switch ( str.charAt( 0 ) ) {
          case 'F':
            bayoneStack.add( str );
            break;
          case 'T':
            baytwoStack.add( str );
            break;
          case 'P':
            baythreeStack.add( str );
            break;
          default:
            // In-case of invalid input
            System.out.println( "" );
        }
      }
    } catch ( IOException ex ) {
      // handle exception;
    } finally {
      fileReader.close();
    }
    // Prints out the linked list stacks showing all Bays.
    System.out.println( "Bay 1:Food: " + bayoneStack.toString() );
    System.out.println( "Bay 2:Technical: " + baytwoStack.toString() );
    System.out.println( "Bay 3:Personal: " + baythreeStack.toString() );

  }
}

【讨论】:

  • 这不是说我现在忽略了代码中的堆栈元素吗?
  • 它只是您使用队列的代码的示例实现。如果您需要两者,您可能需要将上面的 beyoneStack 重命名为 beyoneQueue 并复制添加。或者你填满队列,然后在你的堆栈上调用“addAll(queue)”。
  • 你能给我一个在我的堆栈部分调用的例子吗? Java 还没有那么先进,很抱歉回复晚了。我已经编辑了原始代码以显示新的更新。
猜你喜欢
  • 2018-08-10
  • 2021-07-08
  • 2014-12-23
  • 2010-10-15
  • 1970-01-01
  • 1970-01-01
  • 2021-12-09
  • 2015-05-15
  • 2018-05-30
相关资源
最近更新 更多