연결리스트
노드 - 데이터를 보관해준다!
head - 맨앞의 노드를 지칭
tail - 맨뒤의 노드를 지칭
head랑 tail은 위치정보만 가지고있다.(링크다!)
단일연결 - 어떠한 노드의 위치를 알수없다. (Stoker)
이중연결 - 어떠한 노드의 위치를 알수있다.
seek를 이용 seek<노드의값 이면 앞에 삽입하자!
Dummy 노드 있는게 더 좋다. 특정한 노드 사이에 저장이된다!
pushback - 맨 뒤에 보관한다.
1. in을 보관하는 노드 생성
2. tail 앞에 보관
Ehlist() //헤드랑 테일 초기화~
{
head = new EhNode(); //시작을 가르킬더미 생성
tail = new EhNode(); //마지막을 가르킬 더미 생성
head->af = tail;
tail->be = head;
usage = 0; // 연결리스트의 개수를 알려준다
}
virtual ~Ehlist()
{
EhNode * ehnode = tail->be; // 테일이 가르키는 노드의 옆에노드를 가르킨다.
while(usage!=0)
{
tail->be = tail->be->be; // 테일을 왼쪽왼쪽 가르키게 한다.
delete tail->be; // 테일 옆에 노드를 삭제
usage--;
}
delete tail,head;
}
void push_back(T data)
{
EhNode * ehnode;
ehnode = new EhNode(data);
HangNode(ehnode, end().now); //노드를 넣을 데이터와 마지막 노드의 위치를 넘겨준다.
usage++;
}
void insert(iterator at,T data)
{
EhNode * ehnode;
ehnode = new EhNode(data);
HangNode(ehnode, at.now); //노드를 넣을 데이터와 선택위치를 넘겨준다.
usage++;
}
void erase(iterator at)
{
EhNode * ehnode = at.now;
ehnode->be->af = ehnode->af;
ehnode->af->be = ehnode->be;
usage--;
}