공부중

[자료구조] 리스트(List) - 6 본문

Programing/자료구조

[자료구조] 리스트(List) - 6

곤란 2013. 1. 2. 19:12
반응형

 

이전 글에 이어서 이번에는 데이터 조회를 살펴보자.

NodeManager.cpp - void CNodeManager::PrintNode()

void CNodeManager::PrintNode()

{

    if( NULL == Head )

    {

        std::cout<<"노드가 없습니다."<<std::endl;

    }

    else

    {

        int nCount = 1;

 

        Node *TempNode = Head;

        while ( NULL != TempNode )

        {

            std::cout<<nCount<<"번째 값 : "<<TempNode->nSaveNUM<<std::endl;

            nCount++;

            TempNode = TempNode->Next;

        }

    }

}

노드 안의 데이터를 조회하는 부분이다.

 

노드가 없는 경우는 그대로 "노드가 없습니다" 라고 출력하기 때문에 생략하고

노드가 있을 경우를 살펴보면….

 

1. Node *TempNode = Head;

while ( NULL != TempNode )

{

std::cout<<nCount<<"번째 값 : "<<TempNode->nSaveNUM<<std::endl;

 

2. nCount++;

TempNode = TempNode->Next;

Head를 임시노드(TempNode)에 복사를 하고 TempNode->next를 이용해 각 노드를 돌면서 각 노드의 데이터에 접근한다.

 

 

 

이렇게 1번과 2번을 while문 조건에 거짓이 될 때까지 루프를 돌면서 데이터에 접근할 수 있다.

 

 

다음번에는 노드 삭제 부분을 살펴보자

NodeManager.cpp - void CNodeManager::DeleteNode()

void CNodeManager::DeleteNode()

{

    if( NULL == this->Head )

    {//노드가 하나도 없을 경우

        std::cout<<"노드가 존재하지 않습니다."<<std::endl;

    }

    else

    {

        Node *TempNode = Head->Next;    

        //Head가 가리키는 다음을 복사(처음의 다음부분)

        std::cout<<Head->nSaveNUM<<"값 삭제 시도...";

        delete Head;                    

        //Head가 가리키는 맨 처음을 삭제

        std::cout<<"삭제 성공"<<std::endl;

        Head = TempNode;                

        //이것으로 Head는 삭제전 부분의 다음 부분을 가리킴

    }

}

 

void CNodeManager::AllDelete()

{

    std::cout<<"모두 삭제 시작"<<std::endl;

    while ( NULL != Head )

    {//Head가 NULL일때 모든 노드가 삭제 됨

        this->DeleteNode();

    }

}

노드 삭제 부분이다.

 

노드가 없는 부분은 생략하고

노드가 있을 때를 살펴보면.

1. Node *TempNode = Head->Next;    

 

2. delete Head;    

 

3. Head = TempNode;    

Head를 임시노드(TempNode)에 복사를 하고 TempNode->next를 이용해 각 노드를 돌면서 노드를 삭제한다

삭제한뒤에 임시노드에는 삭제한 뒷부분을 가리키고 있으므로 이것을 Head에 복사하면

Head는 노드들의 맨 첫번째를 가리키게 된다.

 

이렇게 Head가 NULL을 가리킬 때까지 반복하면 모든 노드를 삭제할 수 있다.

 

반응형