david's daily developer note

[C,C++] 매크로로 구현한 Double linked list 본문

[Develop] Native/C++ , C

[C,C++] 매크로로 구현한 Double linked list

mouse-david 2010. 8. 26. 20:55
728x90
이것은, C언어의 매크로로 구현된. linked list이다. 정말 짧고 간단하다.

매크로 NEW(p, type)는 Pointer와 , 할당될 유형을 인자로 받고, Pointer P에 인자 type의 크기만큼, 메모리 할당한다.

인자 Type은 단순 built-in 자료형이나, UDT(User Define Type), class , struct등 모두 가능하다. 으흠~

매크로 ADD(head , p )는, 아래 정의된 structure Linked_List에 , 꼬리를 붙이는 작업을 한다. ㅎㅎ. 자료형은 일방향이 아니고, Double Linked_List이다.  뭐 대충 네모칸 그려놓고, 그리면서 따라가면 이해할 수 있다. 


마지막, FREE(p)는 가비지 콜렉터가 없는 정말 LOW한 C언어에서의 메모리 반납 매크로이다.


#define NEW(p, type)if ((p = (type *) malloc(sizeof(type))) == NULL) { _tprintf(L"NEW : out of Memory!\n");}

#define ADD(head , p )if(head){p->next = head; p->prev = head->prev; head->prev = p ; p->prev->next = p;}

else{head = p; head->next  = head->prev = p;}

#define FREE(p) if(p) {free ((char *) p ); p = NULL;}


struct Linked_List

{

int vnum; // index

tPointi v; // coordinates

tVertex next, prev;

};

728x90