-
[게임알고리즘] 4-2강 링크 리스트[DSU] 게임알고리즘 2026. 3. 27. 20:22728x90
4-1강에서 구현한 링크 리스트에서
- 메모리를 관리할 수 있도록 변경
- 사용하기 편하도록 객체화
NodeMgt nm이 main에서 벗어나는 순간, 추가된 문자열이 출력되고 삭제되는것을 확인 가능함.
1234567891011121314151617181920212223242526272829303132#include "NodeMgt.h"void cb(void* data){char* c = (char*)data;printf("cb %s\n", c);delete c;}int main() {NodeMgt nm(cb);const char* str[] = { "Hello", "World", "!!!", "DSU" };int num = sizeof(str) / sizeof(const char*);for(int i=0; i<num; i++){const char* t = str[i];int len = strlen(t);char* s = new char[len + 1];strcpy(s, t);nm.add(s);}nm.del(0);//delNode(1);//delNode(3);nm.print();return 0;}cs NodeMgt.h
12345678910111213141516171819202122232425262728#include <stdio.h>#include <string.h>struct Node{void* data;Node* next;//Node* prev;};typedef void (*MethodNode)(void* data);struct NodeMgt{Node* first;MethodNode method;NodeMgt(MethodNode m);virtual ~NodeMgt();void add(void* data);void add(int index, void* data);void del(int index);void del(void* data);void delAll();void* at(int index);void print();};cs NodeMgt.h
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697NodeMgt::NodeMgt(MethodNode m){first = NULL;method = m;}NodeMgt::~NodeMgt(){delAll();}void NodeMgt::add(void* data){Node* n = new Node;n->data = data;n->next = NULL;#if 0// 직관적이지만, 효율적이진 않음. 37 line 중복실행if( first==NULL ){first = n;return;}#endiffor(Node* p = first; p;){Node* bk = p;p = p->next;if( p==NULL ){bk->next = n;return;// 실행완료1}}// 실행완료2first = n;}void NodeMgt::add(int index, void* data){// do something}void NodeMgt::del(int index){int i=0;for(Node* p = first, * bk = NULL;p; bk = p, p = p->next, i++){if( i==index ){if( bk==NULL )// i==0first = p->next;elsebk->next = p->next;if (method)method(p->data);delete p;return;}}}void NodeMgt::del(void* data){// do something}void NodeMgt::delAll(){for(Node* p = first; p; ){Node* bk = p->next;if (method)method(p->data);delete p;p = bk;}first = NULL;}void* NodeMgt::at(int index){int i=0;for(Node* p = first; p; p=p->next, i++){if( i==index )return p->data;}return NULL;}void NodeMgt::print(){for(Node* p = first; p; p=p->next){printf("%s\n", (char*)p->data);}}cs 
매일매일 열심히 게임개발하고 있습니다 '[DSU] 게임알고리즘' 카테고리의 다른 글
[게임알고리즘] 5-1강 문자열 (0) 2026.04.03 [게임알고리즘] 4-3강 링크리스트 실습 예제 (0) 2026.03.27 [게임알고리즘] 4-1강 링크리스트 (0) 2026.03.27 [게임알고리즘] 3-3강 링크 리스트 (0) 2026.03.22 [게임알고리즘] 3-2강 링크 리스트 (0) 2026.03.22

