我有一项我正在努力的任务。
根据基于引用的堆栈编写代码,以使用'{','}','(',')'和'[',']'实现用户输入字符串的余额检查。例如,如果用户输入“(abc [d] e {f})”,您的代码应该说表达式是平衡的。
我已经编写了push / pop函数:
public void push(Object newItem) {
top = new Node(newItem, top);
} // end push
public Object pop(){
if (!isEmpty()) {
Node temp = top;
top = top.getNext();
return temp.getItem();
} else {
System.out.print("StackError on " +
"pop: stack empty");
return null;
} // end if
} // end pop
然而,我正在努力解决的是如何为每个角色创建一个新节点。有人可以帮帮我吗?
答案 0 :(得分:1)
为isbalanced
,[
,]
,(
简化)
机制:
[
或(
)
检查时,最后添加的字符为(
。如果是删除(弹出)它,否则标记为不平衡。 ]
检查时,最后添加的字符为[
。如果是删除(弹出)它,否则标记为不平衡。 基于answer for iterate through the characters of a string
unbalanced=false;
for (int i = 0; i < s.length(); i++)
{
char c = s.charAt(i);
if(c.equal('[')
{
push(c);
}
if(c.equal(']')
{
Char tmp = (Char)pop();
if(!tmp.equals('['))
unbalanced=true;
break;
}
}
}
if(pop()!=null)
{
unbalanced=true;
}
答案 1 :(得分:1)
由于您的分配说明要求您根据基于引用的堆栈编写代码&#34;,您的问题似乎更多的是如何将每个用户的输入字符串转换为节点。在这种情况下,您可以将它们首先转换为字符列表,如下所示:
public class Main {
public static void main(String[] args){
String str = new String("[(a)bcde]");
System.out.println(str.toCharArray());
}
}
然后使用ASCII表来判断它是否是一个特殊字符。例如:在上面的代码中:
(int) str.toCharArray()[0] // will show ASCII code of '[', 91
的一些有用的实现
答案 2 :(得分:0)
以下是教授正在寻找的内容:
... }
if(currChar.equals("["))
{
myStackRef.push("[");
}
if(currChar.equals("}") && myStackRef.peek().equals("{"))
{
myStackRef.pop();
}
if(currChar.equals(")") && myStackRef.peek().equals("("))
{
myStackRef.pop();
}
if(currChar.equals("]") && myStackRef.peek().equals("["))
{
myStackRef.pop();
}
}
if(myStackRef.isEmpty())
{
System.out.println("Balanced");
}
else
{
System.out.println("Unbalanced");
}
}
}