2013년 8월 13일 화요일

자바 전화번호부(이중원형연결리스트) 예제

오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(신입사원채용무료교육, 오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷)  

class ChainNode  {             
private PersonalData element;          //Node안에 저장된 item(Object)
private ChainNode next;                  //다음  Node를 가리키는 Reference
private ChainNode prev;                  //이전  Node를 가리키는 Reference

ChainNode() {}   
    ChainNode(PersonalData newElement) {
element = newElement;
next = null;
prev = null;
    }

    ChainNode(PersonalData newElement, ChainNode nextNode,  ChainNode prevNode) {
element = newElement;
next = nextNode;
prev = prevNode;
    }
 
    public void setElement(PersonalData newItem) {
element = newItem;
    }

    public PersonalData getElement() {
return element;
    }

    public void setNext(ChainNode nextNode) {
next = nextNode;
    }

    public ChainNode getNext() {
return next;
    }

public void setPrev(ChainNode prevNode) {
prev = prevNode;
    }

    public ChainNode getPrev() {
return prev;
    }
}




class PersonalData {
    Strin
      this.number = number;     
    }
       
    public String getName() {
      return name;
    }

    public String getNumber() {
      return number; 
    }   
public void setNumber(String number) {
      this.number = number;
    }
   
    public boolean equals(Object o){     
      return name.equals(((PersonalData)o).getName());
    }
public String toString(){
      return name+"씨의 전화번호는" +number +" 입니다";
    }
}



//이중 원형리스트를 이용한 전화번호부
//headerNode를 별도로 만듬 
public class PersonalDataManager {
    // The Node of the list
    private ChainNode headerNode;      &nbssp;void add(PersonalData element) {
        ChainNode tn = new ChainNode(element, null, null);
//맨처음 insert되는 경우
if (headerNode.getN.setNext(tn);
headerNode.setPrev(tn);
        } else {           
tn.setPrev(headerNode.getPrev());
    tel)  {
PersonalData p = search(name);
if (p != null){
p.setNumber(tel);
}
}

public PersonalData search(String name)  {
  &n!= headerNode);
System.out.println("data not found...");
return null;
}

    //주어진 data노드를 Return
    private ChainNode find(PersonalDat;          throw new IllegalArgumentException();
        do {
if (p.getElement().getName().equals(element.getName())) returnbsp; throw new IllegalArgumentException();
    }

public synchronized void remove(String name) {
PersonalData element = search(name);
ChainNode p = find(element);
if (headerNode != p){
p.getPrev().setNext(p.getNext());
p.getNext().setPrev(p.getPrev());
}
    }

public void printAll() {
ChainNode p = headerNode.getNext();
        if (p == null)  throw new IllegalArgumentException();
System.out.println("----- 전화번호부 리스트 -----");
        do {
System.out.println(p.getElement());
            p = p.getNext();
        } while (p != headerNode);
System.out.println("");
}
}



class TelephonebookMain {
    public static void main(String[] args) {
        PersonalDataManager manager = new PersonalDataManager();
        manager.add(new PersonalData("aaa", "333-3333"));
        manager.add(new PersonalData("bbb", "444-4444"));
        manager.add(new PersonalData("ccc", "555-5555"));
manager.add(new PersonalData("ddd", "666-7777"));
manager.printAll();
               
        print(manager.search("bbb"));

//변경을 적용
        manager.change("ccc","777-7777");
        print(manager.search("ccc")); 
        manager.remove("aaa");     
manager.printAll();
    }
    public static void print(PersonalData p){
        System.out.println(p);       
    }
}

댓글 없음:

댓글 쓰기