我正在尝试实现一个队列,该队列将反转堆栈并打印堆栈 FIFO?



我正在尝试制作一个程序,该程序将以先入先出的顺序打印用户输入。我目前做了一个程序,打印堆栈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);
    }
}

我按照上面的规定进行了修改。颠倒逻辑。原始扫描器方法的格式不正确。

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);
    }
}

最新更新