본문 바로가기
  • fishing...
  • eating...
MISCELLANEOUSNESS

[JAVA] JAVA로 구현한 연결리스트

by 회색뿔 2007. 9. 16.


고쳐야 할 부분들이 존재 하겠지만..

음.. 자바에서는 포인터나 참조 이해하기 위한 코드라고 하면 좋을가나..?

아무튼 사용을 하려면 변수 선언부의 접근 제한을 바꿔야 하고 등등의 문제를 해결 해야 할듯 하다...

일단 구현해 본 메소드들은 잘 돌아가나...
틀린부분이나 고쳐야 할 부분을 말해 주면 배리 감사...+_+!



Source
public class DoubleLinkedList
{
 // 변수 선언부.
 protected String Sta;
 protected int PosX;
 protected int PosY;
 
 protected DoubleLinkedList Prev;
 protected DoubleLinkedList Next;
 
 // 상수 선언.
 final private static DoubleLinkedList Head = new DoubleLinkedList();
 final private static DoubleLinkedList Tail = new DoubleLinkedList();
 
 public DoubleLinkedList()
 {// 생성자.
  Sta = null;
  PosX = 0;
  PosY = 0;
 
  Prev = Next = null;
 }
 
 public DoubleLinkedList( String sta, int x, int y )
 {// Data 저장.
  Sta = sta;
  PosX = x;
  PosY = y;
 }

 public void Init()
 {// 초기화 생성자에 같이 실행해도 그다지 문제는 없을 거 같다.
  Head.Next = Tail;
  Head.Prev = null;
 
  Tail.Next = null;
  Tail.Prev = Head;
 }
 
 public void AddNode( String sta, int x, int y )
 {// 노드 추가.
  // 신규노드 생성.
  DoubleLinkedList newNode = new DoubleLinkedList( sta, x, y );
 
  // 링크.
  // 전 노드와의 관계.
  Tail.Prev.Next = newNode;
  newNode.Prev = Tail.Prev;
 
  // 후 노드와의 관계.
  newNode.Next = Tail;
  Tail.Prev = newNode;
 }
 
 public boolean RemoveNode( String sta )
 {// 노드 제거.
  DoubleLinkedList remNode = SearchNode( sta );
 
  if( remNode != null )
  {// 제거할 노드가 존재.
   remNode.Prev.Next = remNode.Next;
   remNode.Next.Prev = remNode.Prev;
   
   remNode = null;
   
   return true;
  }
  else
   return false;
 }
 
 public DoubleLinkedList SearchNode( String sta )
 {// 노드 검색.
  DoubleLinkedList pNode = this;
 
  while( pNode != Tail )
  {// 끝을 만날 때까지 순차 탐색.
   if( pNode.Sta == sta )
   {// 찾는 노드가 있다면 리턴.
    return pNode;
   }
   
   // 다음으로 이동.
   pNode = pNode.Next;
  }
 
  // 못찾았다면 null을 반환.
  return null;
 }
 
 public void NodeDataView()
 {// 모든 노드의 정보를 보여준다.
  // 실제 정보는 Head 다음부터 저장된다.
  DoubleLinkedList pNode = Head.Next;
 
  while( pNode != Tail )
  {
   System.out.println( "Sta : " + pNode.Sta + " PositionX : " + pNode.PosX
     + " PositionY : " + pNode.PosY );
   pNode = pNode.Next;
  }
 }
}