공부중
[자료구조] 리스트(List) - 5 본문
앞 글에서 나온 소스를 설명 해보고자 한다.
먼저 앞의 소스코드에서 데이터를 담을 때 마다 동적으로 메모리를 잡아주고
필요 없을 시 삭제하고 하였다.
이것을 간단한 비유를 들어보자.
Node.h |
#pragma once
class Node { public: Node(); ~Node();
private:
friend class CNodeManager; int nSaveNUM; Node *Next; }; |
이 Node클래스를 화물 컨테이너에 비유를 해보자.
직접 그림을 그리긴 했지만 ..
기차가 맞으니 오해는 없길 바랍니다.
화물 컨테이너가 하나도 없을 때 기차의 모습은 이러할 것이다.
여기에 화물이 1개가 추가 되었을 때 이러한 모습일 것이다.
그리고 컨테이너 안에는 데이터가 들어가 있을 것이다.
또한 이 기차는 필요한 화물 량에 따라서 추가가 되고 삭제가 될 것이다.
따라서 위의 Node 클래스의 nSaveNUM 변수는 컨테이너 안에 물건을 넣듯 값을 저장할 수가 있고
Node형 포인터 Next는 위의 기차가 줄줄이 이어진 것처럼 바로 다른 Node를 가리킬 수 있다.
필요할 때 마다 화물을 연결하고 컨테이너 안에 물건을 넣고 연결한다
→ 필요할 때 마다 Node형 클래스의 객체(이하 노드)를 하나씩 동적으로 할당하여 줄줄이 연결한다.
이러한 개념이 이해가 되었으면 삽입 부분을 살펴보자
NodeManager.h |
#pragma once
#include "Node.h"
enum eChoiceMenu { eInsert = 1, eDel, ePrint, eExit, };
class CNodeManager { public: CNodeManager(); ~CNodeManager();
int Start();
void PrintNode(); //노드 출력
private:
friend Node; Node *Head; Node *Tail;
void InsertNode(); //노드 삽입 void DeleteNode(); //노드 삭제
void AllDelete(); //모든 노드 삭제
int GetData(); //노드에 들어갈 데이터 받기
}; |
먼저 노드들을 관리할 노드매니저 클래스다.
여기서 Head와 Tail에서 (노드의 머리와 노드의 꼬리)
Head는 해당 리스트의 머리부분(맨 앞 부분)을 가리키는 포인터 변수이다.
Tail은 해당 리스트의 꼬리부분(맨 뒷 부분)을 가리키는 포인터 변수이다.
NodeManager.cpp - void CNodeManager::InsertNode() |
void CNodeManager::InsertNode() { Node *newNode = new Node; newNode->nSaveNUM = this->GetData();
if( NULL == this->Head ) {//헤드가 NULL일 경우 (아무런 노드가 없을 경우) this->Head = newNode; } else {//Tail은 항상 마지막 노드를 가리키므로... this->Tail->Next = newNode; }
this->Tail = newNode; //노드 추가후 Tail을 마지막 노드를 가리키게 설정
} |
이 부분이 노드매니저의 노드 삽입부분이다.
현재 Head와 Tail은 이렇게 NULL을 가리키고 있다.
첫번째 노드가 추가 될 때를 살펴보면
1. Node *newNode = new Node;
newNode->nSaveNUM = this->GetData();
2. if( NULL == this->Head )
{//헤드가 NULL일 경우 (아무런 노드가 없을 경우)
this->Head = newNode;
}
3. this->Tail = newNode;
그리고 두번째 이후의 노드 추가를 살펴보면 ..
1. Node *newNode = new Node;
newNode->nSaveNUM = this->GetData();
2. else
{//Tail은 항상 마지막 노드를 가리키므로...
this->Tail->Next = newNode;
}
3. this->Tail = newNode;
이 그림들을 보고 삽입부분에 대한 이해를 마치고
다음글에서 데이터 조회 및 삭제부분을 살펴 보겠습니다.
'Programing > 자료구조' 카테고리의 다른 글
[자료구조] 원형 연결리스트 (0) | 2013.01.03 |
---|---|
[자료구조] 리스트(List) - 6 (0) | 2013.01.02 |
[자료구조]리스트(List) - 4 (0) | 2013.01.02 |
[자료구조] 리스트(List) - 3 (0) | 2013.01.02 |
[자료구조] 리스트(List) - 2 (0) | 2012.12.28 |