gpt4 book ai didi

java - 我正在尝试实现一个 Queue 来反转堆栈并打印堆栈 FIFO?

转载 作者:行者123 更新时间:2023-11-30 10:36:41 26 4
gpt4 key购买 nike

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

最佳答案

我按照上面提供的进行了修改。反转逻辑。原始 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);
}
}

关于java - 我正在尝试实现一个 Queue 来反转堆栈并打印堆栈 FIFO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40504766/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com