#pragma once
#ifndef ___DblinkedList
#define ___DblinkedList
#include "Node2.h"
//DblinkedList.h : 이중 연결 리스트 클래스
class DbLinkedList {
Node2 org; //헤드노드
public:
DbLinkedList() : org(0) {} //생성자
~DbLinkedList() { while (!isEmpty()) delete remove(0); } //소멸자
void clear() { while (!isEmpty()) delete remove(0); }
Node2* getHead() { return org.getNext(); }
bool isEmpty() { return getHead() == NULL; }
Node2* getEntry(int pos) { //pos 번째 노드 반환
Node2* n = &org;
for (int i = -1; i < pos; i++, n = n->getNext())
if (n == NULL) break;
return n;
}
void insert(int pos, Node2* n) { //pos위치에 노드 삽입
Node2* prev = getEntry(pos - 1);
if (prev != NULL)
prev->insertNext(n);
}
Node2* remove(int pos) { //pos 위치의 노드 삭제
Node2* n = getEntry(pos);
return n->remove();
}
Node2* find(int val) { //값이 val인 노드 탐색
for (Node2* p = getHead(); p != NULL; p = p->getNext())
if (p->hasData(val)) return p;
return NULL;
}
void replace(int pos, Node2* n) { //pos 위치의 노드 교체
Node2* prev = getEntry(pos - 1);
if (prev != NULL) {
delete prev->getNext()->remove();
prev->insertNext(n);
}
}
int size() { //리스트의 전체 노드수 반환
int count = 0;
for (Node2* p = getHead(); p != NULL; p = p->getNext())
count++;
return count;
}
void display() { //리스트를 화면에 보기 좋게 출력
printf("[이중연결리스트 항목 수 = %2d] : ", size());
for (Node2* p = getHead(); p != NULL; p = p->getNext())
p->display();
printf("\n");
}
};
#endif // !Node2.h
'Programming > DS SorceCode' 카테고리의 다른 글
BinaryNode.h : 이진 트리를 위한 노드 클래스 (0) | 2019.03.25 |
---|---|
LinkedDeque.h : 연결된 덱 클래스 (0) | 2019.03.24 |
Node2.h : 이중연결리스트 노드를 나타내기 위한 클래스 (0) | 2019.03.24 |
LinkedList.h : 단순 연결 리스트 클래스 (0) | 2019.03.23 |
Node_Int : 연결된 큐를 위한 int형 클래스 + 연결 리스트로 구현된 리스트를 위한 노드 클래스 (0) | 2019.03.23 |