【发布时间】:2016-02-18 01:10:10
【问题描述】:
我正在编写一个程序,它要求用户输入后缀表达式,然后将结果输出到表达式。我正在尝试使用单链表并使用适配器模式来创建堆栈。
SinglyLinkedList 类、LinkedStack 类和 Stack 实现的代码都直接来自我拥有的一本数据结构书。所以SinglyLinkedListTest 类是唯一一个包含我自己的代码(并且有错误)的类。
我之前写过一个简单地使用堆栈来评估后缀表达式的程序,但这次我对包含的额外类感到困惑。
我确定我有很多错误,但对我来说最明显的错误是在我的 SinglyLinkedListTest 类中,每次我将一个值压入堆栈时。我知道问题是我试图将对象和字符推送到堆栈上,而不是与 push(E e) 匹配的参数,但我不知道如何更改我的代码以使其工作。
任何建议或意见将不胜感激。
这是我的堆栈实现:
package PostFix;
public interface Stack<E>
{
int size();
boolean isEmpty();
void push(E e);
E pop();
}
这是我的 LinkedStack 课程:
package PostFix;
public class LinkedStack <E> implements Stack<E>
{
private SinglyLinkedList<E> list = new SinglyLinkedList<>();
public LinkedStack()
{
}
public int size()
{
return list.size();
}
public boolean isEmpty()
{
return list.isEmpty();
}
public void push(E e)
{
list.addFirst(e);
}
public E pop()
{
return list.removeFirst();
}
}
这是我的 SinglyLinkedList 类:
package PostFix;
public class SinglyLinkedList<E>
{
private static class Node<E>
{
private E element;
private Node<E> next;
public Node(E e, Node<E> n)
{
element = e;
next = n;
}
public E getElement()
{
return element;
}
public Node<E> getNext()
{
return next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
public SinglyLinkedList()
{
}
public int size()
{
return size;
}
public boolean isEmpty()
{
return size == 0;
}
public void addFirst(E e)
{
head = new Node<>(e, head);
if (size == 0)
{
tail = head;
}
size++;
}
public E removeFirst()
{
if (isEmpty())
{
return null;
}
E answer = head.getElement();
head = head.getNext();
size--;
if (size == 0)
{
tail = null;
}
return answer;
}
}
这是我的 final SinglyLinkedListTest 类:
package PostFix;
import java.util.Scanner;
public class SinglyLinkedListTest
{
public static void main(String[] args)
{
Double num1, num2, answer;
char c;
Stack<Double> stack = new LinkedStack<>();
Scanner input = new Scanner(System.in);
System.out.println("Enter the expression you would like to evaluate: ");
String someString = input.nextLine();
for (int index = 0; index < someString.length(); index++)
{
c = someString.charAt(index);
if (Character.isDigit(c))
{
stack.push((double)Character.digit(c, 10));
}
else if (c == '+')
{
num2 = stack.pop();
num1 = stack.pop();
answer = num1+num2;
stack.push(answer);
}
else if (c == '-')
{
num2 = stack.pop();
num1 = stack.pop();
answer = num1-num2;
stack.push(answer);
}
else if (c == '*')
{
num2 = stack.pop();
num1 = stack.pop();
answer = num1*num2;
stack.push(answer);
}
else if (c == '/')
{
num2 = stack.pop();
num1 = stack.pop();
answer = num1/num2;
stack.push(answer);
}
}
System.out.println("The result is: " + stack.pop());
}
}
【问题讨论】:
-
有什么问题?
-
@EJP - 在我的 SinglyLinkedListTest 类中,我试图将元素推送到堆栈上,但我试图推送的参数与 push(E e) 方法中定义的参数不同(我我试图将对象和字符推入堆栈而不是 E e)。如何使参数匹配,或者如何更改代码以成功将这些元素推送到堆栈上?
-
定义'不是相同的参数','使参数匹配',...
标签: java linked-list stack postfix-notation