2016-11-09 13 views
2

私は先入先出でユーザー入力を印刷するプログラムを作ろうとしています。私は現在、スタックLIFO(最後に先入れ先出し)を印刷するプログラムを作成しました。しかし、どのように私は、FIFO(先入れ先出し)の順序でスタックの出力を表示するキューを実装するつもりです。以下スタックを作り直してスタックFIFOを取り消すキューを実装しようとしていますか?

マイコード:

import java.util.*; 

public class stackReversal { 

    private class Node { 
     private String item; 
     private Node next; 
    } 

    private Node first = null; 

    public boolean isEmpty() { 
     return (first == null); 
    } 

    public void push(String s) { 
     Node node = new Node(); 
     node.item = s; 
     node.next = first; 

     first = node; 
    } 

    public String pop() { 
     if (first == null) 
      throw new RuntimeException("Stack Empty!"); 
     String result = first.item; 
     first = first.next; 
     return result; 

    } 

    public String popString() { 
     String result = ""; 
     Node current = first; 

     while (current != null) { 
      result += current.item; 
      current = current.next; 
     } 
     return result; 
    } 

    public String toString() { 

     StringBuilder nodes = new StringBuilder(); 

     Node node = first; 

     while (node != null) { 
      nodes.append(node.item).append("\n"); 
      node = node.next; 
     } 

     if(isEmpty()) { 
      return ""; 
     } else { 
      return nodes.toString().substring(0, nodes.toString().length()); 
     } 
    } 
    class Queue{ 
     Node first, last; 

     public void enqueue(Node n){ 
      if(first == null){ 
       first = n; 
       last = first; 
      }else{ 
       last.next = n; 
       last = n; 
      } 
     } 

     public Node dequeue(){ 
      if(first == null){ 
       return null; 
      }else{ 
       Node temp = new Node(first); 
       first = first.next; 
       return temp; 
      } 
     } 
    } 


    public static void main(String[] args) 
    { 
     stackReversal s = new stackReversal(); 
     Scanner input = new Scanner(System.in); 
     System.out.print("Enter strings:"); 
     String in = ""; 
     while (!in.equals("end-of-input")) 
     { 
      in = input.nextLine(); 
      if (in.equals("end-of-input")) 
       break; 
      else 
       s.push(in); 
     } 

     System.out.println("Strings:"+"\n" + s); 
    } 
} 
+0

なぜキュー構造ではなく、スタックに項目を追加する代わりに、逆Node' –

+0

'確かにあなたがクラスの非既存のコンストラクタを使用して、あなたのコードがコンパイルされませんのでご注意ください。また、Deque(両端キュー)https://en.wikipedia.org/wiki/Double-ended_queueを実装し、スタックとキューの両方の動作を取得することもできます。 'Deque'インタフェースも参照してください。https://docs.oracle.com/javase/7/docs/api/java/util/Deque.html –

答えて

1

私は上記のように変更。ロジックを元に戻しました。オリジナルのスキャナメソッドが正しくフォーマットされていませんでした。

import java.util.*; 

public class stackReversal { 

    private class Node { 
     private String item; 
     private Node next; 
     // private Node prev; 
    } 

    private Node first = null; 

    public boolean isEmpty() { 
     return (first == null); 
    } 

    public void push(String s) { 
     Node node = new Node(); 
     node.item = s; 
     node.next = first; 

     first = node; 
    } 

    public String pop() { 
     if (first == null) 
      throw new RuntimeException("Stack Empty!"); 
     String result = first.item; 
     first = first.next; 
     return result; 

    } 

    public String popString() { 
     String result = ""; 
     Node current = first; 

     while (current != null) { 
      result += current.item; 
      current = current.next; 
     } 
     return result; 
    } 

    public String toString() { 

     StringBuilder nodes = new StringBuilder(); 

     Node node = first; 



     while (node != null) { 
      nodes.append(node.item).append("\n"); 
      node = node.next; 
     } 

     if(isEmpty()) { 
      return ""; 
     } else { 
      return nodes.toString().substring(0, nodes.toString().length()); 
     } 
    } 
    class Queue{ 
     Node first, last; 

     public void enqueue(String s){ 
      Node node = new Node(); 
      node.item = s; 
      node.next = first; 

      first = node; 
     } 

     public Node dequeue(){ 
      if(first == null){ 
       return null; 
      }else{ 
       Node temp = new Node();//Node temp = new Node(); 
       first = first.next; 
       return temp; 
      } 
     } 
     public String toString() { 

      StringBuilder nodes = new StringBuilder(); 

      Node node = first; 

      while (node != null) { 
       // Insert the current item at the beginning of the String 
       nodes.insert(0, String.format("%s%n", node.item)); 
       node = node.next; 
      } 



      if(isEmpty()) { 
       return ""; 
      } else { 
       return nodes.toString().substring(0, nodes.toString().length()); 
      } 
     } 

    } 


    public static void main(String[] args) 
    { 
     stackReversal s = new stackReversal(); 
     Queue q = s.new Queue(); 
     Scanner input = new Scanner(System.in); 
     System.out.print("Enter strings:"); 
     String in = input.nextLine(); 
     while (!in.equals("end-of-input")) 
     { 

      if (in.equals("end-of-input")) 
       break; 
      else 
       q.enqueue(in); 
       s.push(in); 
      in = input.nextLine(); 
     } 


     System.out.println("Strings:"+"\n" + s); 
     System.out.println("Strings:"+"\n" + q); 
    } 
} 
+0

ありがとう、私が間違っていたことを正確に見てください。 –

関連する問題