JAVA Linked List 전화번호부(이중원형연결리스트) 예제
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);
}
}
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);
}
}
댓글 없음:
댓글 쓰기