2

我正在尝试制作一个以先进先出顺序打印用户输入的程序。我目前制作了一个打印堆栈 LIFO(后进先出)的程序。但是,我将如何实现一个队列,该队列将以 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);
    }
}
4

1 回答 1

1

我按照上面提供的方式进行了修改。反转逻辑。原始的 Scanner 方法格式不正确。

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);
    }
}
于 2016-11-09T14:37:07.027 回答