2012-03-11 7 views
2

그래프 (인접성 목록)를 저장하기 위해 클래스에 대한 링크 된 목록의 배열을 만들어야합니다. 자바를 사용해야합니다. 배열을 만들고 각 연결된 목록을 인스턴스화 할 수 있지만 각 요소에 첫 번째 요소를 추가 할 때 모든 연결된 목록이 배열의 인덱스에있는 것뿐만 아니라 변경됩니다. 이 각각의 새로운 연결리스트를 인스턴스화Java에서 연결된 목록의 배열

Node [] adjList; 
for(i=0;i<adjList.length;i++) 
    adjList[i] = new Node(0,0,null); 

[Node 생성자 Node(int head, int data, Node next로, 내 자신의 클래스)와 LinkedList 확장]

그때 내가 각 노드에 첫 번째 값을 추가로 이동합니다

for(i=0;i<adjList.length;i++) 
    adjList[i].setHead(i+1); // numbers 1 to end are the graph vertices 

또는

for(i=0;i<adjList.length;i++) 
    adjList[i].add(new Node(i+1,0,null); 

인쇄용 ements는 코드 을 디버깅하기 위해이 루프의 끝에서 각 연결된 목록을 인쇄하지만 각각에 대해 최종 값이됩니다.

즉. adjList.length = 2 경우, 그것은

[3,0,null] // adjList[0] 
[3,0,null] // adjList[1] 
[3,0,null] // adjList[2] 

편집 출력 할 것이다 : 여기 노드 클래스

import java.util.LinkedList; 
public class Node extends LinkedList{ 
    private static int head; 
    private static int data; 
    private static Node next; 

    public Node(int h,int d,Node n) { 
     head = h; 
     data = d; 
     next = n; 
    } 
    public int getHead(){ // getNext() and getData() are the same 
     return head; 
    } 
    public void setHead(int h){ // setNext() and setData() are basically the same 
     head = h; 
    } 
} 
+0

이 숙제입니까? 나는 우리가 돕기 위해'Node' 코드를 필요로한다고 생각합니다 ... –

+2

'Node'의 정의를 게시하십시오. –

+2

'Node' 클래스가'LinkedList'를 확장하는 이유는 무엇입니까? 거기에 is-a 관계가 없습니다. –

답변

0

Node 내에서 무언가를 정적으로 선언 했으므로 모든 인스턴스가 자체 값을 가지기보다는 동일한 공유 값으로 끝납니다.그러나 이것은 단지 추측 일뿐입니다. Node 코드를 게시하면 문제가 실제로 무엇인지 알 수 있습니다 ...

+0

모든 빠른 답변을 주셔서 감사합니다, 나는 머리, 다음 및 데이터 정적으로했다. 많은 Java 작성하지 않습니다. –

0

나는 각 사람에게 첫 번째 요소를 추가로 이동하고, 모든 연결리스트가 아니라, 변경됩니다 배열 인덱스에있는 문자

코드 조각에는 표시되지 않지만 거의 별칭 문제가 있습니다. 거의 모든 객체 지향 언어에서 초보자를 괴롭히는 경향이있는 앨리어싱 문제는 동일한 객체를 가리키는 두 개의 다른 변수, 즉 두 개의 다른 변수를 갖는 동일한 객체를 참조하는 문제입니다.

이제 배열 색인은 어떨까요? 문제는 하나의 배열 인덱스에서 변수를 변경하고 모든 배열 인덱스에서 변경된 이름을 가진 변수가 아니라 변경 사항을 얻는 것입니다. 그러나 Eric Lippert explains (C#의 경우 Java와 매우 유사 함)으로 배열은 실제로 여러 개의 개별 이름을 정의하지 않고 인덱서 표현식으로 참조 할 수있는 많은 변수입니다. 어떤 의미에서, int[] foo = new int[3]foo0, foo1foo2에서 해당 변수를 선택하는 컴파일러를 알려줍니다 foofoo0, foo1foo2 및 색인을 선언하는 것과 같다.

배열에 실제로 여러 개의 노드가있는 경우 여러 Node 인스턴스간에 데이터를 공유하는 방법이 궁금 할 수 있습니다. 몇 가지 방법이 있으며 Node 클래스의 코드가 없으면 거의 불가능합니다. @DNA가 지적 하듯이, 모든 인스턴스에서 자동으로 공유되는 Node 클래스에 정적 데이터가있을 수 있습니다. Node 개체는 기본 데이터에 대한 참조를 가질 수도 있습니다. 동일한 참조를 모든 Node 생성자에 전달하면이 모든 방법으로 동일한 객체에 별칭이 지정됩니다.

관련 문제