在堆栈上创建字符的链接列表?

时间:2016-11-01 23:28:22

标签: java linked-list char stack

我有一项我正在努力的任务。

根据基于引用的堆栈编写代码,以使用'{','}','(',')'和'[',']'实现用户输入字符串的余额检查。例如,如果用户输入“(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

然而,我正在努力解决的是如何为每个角色创建一个新节点。有人可以帮帮我吗?

3 个答案:

答案 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

关于Reference-based Stack

的一些有用的实现

答案 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");         
   }    
}  
}