1편과 이어집니다. 

1편 링크


노드 생성


 메모리 종류


   정적 메모리

전역 변수나 정적 변수 등이 저장되는 곳. 프로그램 종료 시 해제 되는 영역.


   자동 메모리

코드 블록 '{}' 이 종료되면 소멸하는 영역. 함수 등.


   자유 저장소

프로그래머가 자유롭게 메모리를 할당 및 사용. 안전하게 해제해야할 책임을 가짐.


malloc()

   자유 저장소에 메모리를 할당하는 함수. void* malloc(size_t size);

   void*은 어떤 자료형도 가리킬 수 있다. 만능. 

   Node* NewNode = (Node*)malloc(sizeof(Node));


노드 생성 함수 예시

Node* SLL_CreateNode(ElementType NewData)

{

Node* NewNode = (Node*)malloc(sizeof(node));

{

if ((*Head) == NULL)    //헤드 노드가 NULL이라면 새로운 노드가 Head가 된다.

NewNode->Data = NewData;

NewNode->NextNode = NULL;


return NewNode;

}


*SLL은 Singly Linked List라는 의미. Double Linked List와 구분하기 위해 명명.


   노드 소멸은 free(Node)를 사용한다.


노드 소멸 함수

void SLL_DestroyNode(Node* Node)

{

free(Node);

}



노드 추가

테일 노드 뒤에 새로운 노드를 만들어 연결하는 것

기존 테일 노드의 포인터는 신규 테일노드를 가리키게 하고 신규 테일노드의 포인터는 NULL값을 가진다.


노드추가 함수 예시

void SLL_AppendNode(Node** Head, Node* NewNode)

{

*Head = NewNode;

}

else

{

Node* Tail = (*Head);        //테일을 찾아 NewNode를 연결.

while (Tail->NextNode != NULL)

{

Tail = Tail->NextNode;

}


Tail->NextNode = NewNode;

}

}



  위와 같이 구현한 Append함수는 리스트를 만들어 사용합니다.

Node* List = NULL;

Node* NewNode = NULL;


NewNode = SLL_CreateNode (117);    //자유 저장소에 노드 생성

SLL_AppendNode(&List, NewNode);    //생성한 노드 List에 추가


NewNode = SLL_CreateNode(119);    //자유 저장소에 또다른 노드 생성

SLL_AppendNode(&List, NewNode);    //생성한 노드 List에 추가


Append함수의 매개변수 중 Node**로 선언된 이유

Node*로만 포인터를 지정하면 List포인터가 담고 있는 주소값만 복사된다. 여기서는 LIST변수 자체의 주소가 필요하다.



+ Recent posts