공부중
[자료구조] 리스트(List) - 6 본문
이전 글에 이어서 이번에는 데이터 조회를 살펴보자.
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을 가리킬 때까지 반복하면 모든 노드를 삭제할 수 있다.
'Programing > 자료구조' 카테고리의 다른 글
[자료구조] 양방향 연결리스트(doubly Linked list 이중 연결 링크드 리스트) (0) | 2013.01.03 |
---|---|
[자료구조] 원형 연결리스트 (0) | 2013.01.03 |
[자료구조] 리스트(List) - 5 (0) | 2013.01.02 |
[자료구조]리스트(List) - 4 (0) | 2013.01.02 |
[자료구조] 리스트(List) - 3 (0) | 2013.01.02 |