2016-11-01 26 views
1

我有一个任务,我正在努力。在栈上创建一个链接的字符列表?

根据基于引用的堆栈编写代码,实现用'{','}','(',')'和'[',']'对用户输入字符串进行余额检查。例如,如果用户输入“(abc [d] e {f})”,你的代码应该说表达式是平衡的。

我具备的功能推动/已经写流行:

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 

然而,我所用的是理解如何为每一个字符一个新的节点挣扎。有人可以帮我吗?

+1

这里的想法是不与名单做,它是关于什么条件要求在角色上放置角色。 – Rogue

+0

我没有发布完整的作业。教授的说明应该能够基于ARRAY实现,然后基于LIST。 – bm0r3son

+0

编写代码以使用基于数组的堆栈实现以下功能:a。要求用户输入任何字母串b。在字符串中,如果'A'的数量是'B'的数量的两倍,则输出“是”,否则输出 2.编写基于引用的堆栈的代码以实现用户 输入带'{','}','(',')'和'[',']'的字符串。例如,如果用户输入“(abc [d] e {f})”,则代码应该说该表达式是平衡的。 – bm0r3son

回答

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");   
    }  
} 
} 
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; 
} 
+0

这是什么工作,我理解这个概念。但是,我的问题是从角色中创建角色并创建节点。 – bm0r3son

+0

@TonyKelly有帮助吗? – mikek3332002

1

因为你的作业指示要求你“的基础上引用基于栈编写代码”,看来你的问题是更关于如何将每个用户的输入字符串转换为节点。在这种情况下,你可以把它们先转换只需像这样的字符的列表:

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 

一些有用的实现约Reference-based Stack

+0

我假设案件“(a [bc)de]”不被认为是平衡的?否则会有更多的条件考虑 –

+0

嗨,非常感谢您的回答!不幸的是,我不能使用这个ebcasue,我不允许使用数组。你会碰到更多的建议吗? – bm0r3son

+0

或使用子串。 String str =“hello”; str.substring(0,1) - >'h' –