2016-11-01 5 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

배열 기반 스택에서 다음 기능을 구현하는 코드를 작성하십시오. 임의의 문자 열에 대해 사용자 입력을 요구하십시오. b. 문자열 내에서 'A'의 숫자가 'B'의 숫자의 두 배인 경우 "Yes"를 출력하고 그렇지 않으면 을 출력합니다. 2. 참조 기반 스택을 기반으로 코드를 작성하여 ''{ ','} ','(',') '및'[ '및'] '입력 문자열. 예를 들어, 사용자가 "(abc [d] e {f})"를 입력하면 코드에서 표현식이 균형을 이룬다 고 말해야합니다. – bm0r3son

답변

0
다음

입니다 Reference-based Stack에 대한 어떤 교수 찾던 : 목록과 관련되지 않은

... }  
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 메커니즘, ], (, ) : 항상

  • 추가 (푸시)를 [, 또는 (
  • 당신은 마지막에 추가 문자가 (이었다 ) 검사에 도착하면 . 제거 (팝)했다면, 그렇지 않으면 불균형으로 표시하십시오.
  • ]에 오면 마지막으로 추가 된 문자는 [입니다. 제거 (팝)했다면, 그렇지 않으면 불균형으로 표시하십시오.
  • 문자열의 끝까지 스택이 비어 있으면 균형을 유지합니다. 귀하의 코멘트에 reponse에

오프를 기반으로 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 

몇 가지 유용한 구현

+0

"(a [bc) de]"가 균형을 이루지 않은 것으로 가정합니다. 그렇지 않으면 고려해야 할 조건이 더 많을 것입니다. –

+0

안녕하세요, 답변 해 주셔서 감사합니다. 불행히도, 나는이 배열을 사용할 수 없다. 나는 배열을 사용하는 것을 허락하지 않는다. 추가 제안 사항이 있습니까? – bm0r3son

+0

또는 부분 문자열을 사용하십시오. String str = "hello"; str.substring (0,1) -> 'h' –

관련 문제