-
[게임알고리즘] 3-1강 링크 리스트[DSU] 게임알고리즘 2026. 3. 22. 10:58728x90
문자열을 추가, 삭제 가능한 링크리스트를 구현
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162#include <stdio.h>#include <string.h>#include <stdlib.h>struct Node{const void* data;Node* prev;};Node* last = NULL;int countNode();void addNode(const void* data){Node* n = new Node;n->data = data;n->prev = last;last = n;}void addNode(int index, const void* data){int i = countNode() - 1;if( index==i ){addNode(data);return;}for(Node* p = last; p; p = p->prev, i--){if(i==index){Node* n = new Node;n->data = data;n->prev = p->prev;p->prev = n;return;}}printf("failed to insert node\n");}void delNode(int index){int i = countNode() - 1;for(Node* p = last,* back = NULL; p;back = p, p = p->prev, i--){if(i==index){if( back )back->prev = p->prev;else// if( last==NULL )last = p->prev;delete p;return;}}}#if 0bool delNode_(const void* data){for(Node* p = last, * back = NULL; p;back = p, p = p->prev){if( p->data==data ){if( back )back->prev = p->prev;elselast = p->prev;return true;}}return false;}void delNode(const void* data){while(delNode_(data));}#elsevoid delNode(const void* data){for(Node* p = last, * back = NULL; p;)//back = p, p = p->prev){if( p->data==data ){if( back )back->prev = p->prev;elselast = p->prev;//back = back;// 000Node* bk = p->prev;// 111delete p;p = bk;}else{back = p;// 000p = p->prev;// 111}}}#endifvoid delAllNode(){for(Node* p = last; p; ){Node* bk = p->prev;delete p;p = bk;}last = NULL;}const void* atNode(int index){int i = countNode() - 1;for(Node* p = last; p; p = p->prev, i--){if( i==index )return p->data;}return NULL;}int countNode(){int i=0;for(Node* p = last; p; p = p->prev, i++);return i;}int main() {const char* str[] = { "Hi", "world", "!!" };for(int i=0; i<3; i++)addNode(str[i]);addNode(0, str[0]);//delNode(2);delNode(str[0]);int count = countNode();for(int i=0; i<count; i++){printf("nm[%d].data[%s]\n", i, (const char*)atNode(i));}return 0;}cs 
매일매일 열심히 게임개발하고 있습니다 '[DSU] 게임알고리즘' 카테고리의 다른 글
[게임알고리즘] 3-3강 링크 리스트 (0) 2026.03.22 [게임알고리즘] 3-2강 링크 리스트 (0) 2026.03.22 [게임알고리즘] 2-2강 정렬 실습 예제 (0) 2026.03.13 [게임알고리즘] 2-1강 정렬 다듬기 최종 (0) 2026.03.13 [게임알고리즘] 1-5강 함수포인터 대응 (0) 2026.03.13

