2012-10-05 4 views
1

스택 구현. Node 클래스에 "Node"유형의 fild를 만들려면 어떻게해야합니까 ?? "Node"유형의 "first"변수에 "Node"유형의 fild가 포함될 수 있습니까? 도움Node 클래스에 "Node"유형의 fild를 만들려면 어떻게해야합니까?

public class Stack 
{ 
private Node first = null; 

private class Node 
{ 
    String item; 
    Node next; 
} 

public boolean isEmpty() 
{ 
    return first == null; 
} 

public void push(String item) 
{ 
    Node oldFirst = first; 
    first = new Node(); 
    first.item = item; 
    first.next = oldFirst; 
} 

public String pop() 
{ 
    String item = first.item; 
    first = first.next; 
    return item; 
} 

}

+1

왜 이것이 * 작동하지 않을 것이라고 생각하는지 완전히 불분명합니다. 나는 당신이'Node'를 정적 중첩 클래스로 만들어야한다고 생각합니다 ... –

+0

나는이 질문을 이해하지 못합니다. 어떻게? 코드가 있잖아, 그렇지? – eis

+0

코드가 작동하지만 원리가 없습니다. –

답변

1

자바 참조 (또는 포인터)에 의해 개체를 처리 주셔서 감사합니다.

class Node { 
    String value; 
    Node next; 
} 

이 클래스의 인스턴스가 주어지면 본문에는 8 바이트 메모리가 필요합니다 (32 비트 시스템에서). 처음 4 바이트는 문자열에 대한 포인터를 저장하고 다음 4 바이트는 다른 Node 객체 (또는 null)를 가리 킵니다.

1

Node은 재귀 적 데이터 구조입니다. 당신이 목록을 가지고 있다고 상상해보십시오. 목록은 비어 있거나 첫 번째 요소와 나머지 요소를 포함 할 수 있습니다. 나머지 요소도 목록입니다.

Stack 클래스에는 Node 인스턴스의 참조가 있습니다. 이 첫 번째 인스턴스는 String 값과 다음 Node 인스턴스에 대한 참조로 구성됩니다. 처음에는 클래스가 같은 클래스의 필드를 가질 수 있다는 것을 이해하는 것은 쉽지 않습니다. 그러나 이것은 근본적인 prinicple입니다. 나는. Person 클래스가 있습니다. One Person 인스턴스는 다른 Person 인스턴스에 대한 연관을 가질 수 있습니다. father처럼 그런 다음 Person 클래스에 father 필드를 포함시키는 것은 당연합니다. father 유형은 사람입니다. 그것은 마법이 아닙니다. 클래스 인스턴스 간의 연결을 모델링하는 방법 일뿐입니다. 여기서 유일하게 특별한 것은 두 클래스 사이가 아닌 같은 클래스 간의 연관입니다.

관련 문제