프로그래밍2008. 4. 28. 20:58
반응형


탐색에 대표적인 것으로  이진탐색이 있습니다.

이분화 하여 탐색하는 것이기에 시간과 자원의 효율이 극대화 됩니다.


함수로는....


tsearch(const void *key,void **rootp,int(*compare)(const void *,const void *));

이진트리에서 데이터를 탐색하는 함수입니다.  발견치 못할시 트리에 추가합니다.

tdelete(const void *key,void **rootp,int(*compare)(const void *,const void *));

이진트리에서 데이터를 삭제 합니다.

twalk(const void*root,void(*action)(const void *nodep,const VISIT which,const int depth));

이진트리를 방문합니다.


key:찾고자 하는 데이터

rootp,root:이진트리에 대한 포인터

compare:두 데이터를 비교하는 함수 같으면 0, 다르면 0이 아닌값을 반환..

action:구체적인 동작을 하는 함수


이외에 tfind()라는 함수가 있으나 이 함수는 데이터를 찾지 못할시에 트리에 추가 되지않습니다.

그외엔 다 같은 기능을 가지고 있죠..


약간의 예를 들면..

int compare(const void *a,const void *b);

void printtree(void **node,VISIT order,int depth);


main()

{

void *root;

root=NULL;

tsearch("Hello",&root,compare);

tsearch("C",&root,compare);

twalk(root,printtree);//위의 tsearch함수에서 Hello와 C가 추가 되었고 그내용들을 출력

tdelete("C",&root,compare);

twalk(root,printtree);//위의 tdelete함수에서 C를 삭제후 그내용들을 출력

}

int compare(const void *a, const void *b)

{

return strcmp((char*)a,(char*)b);

}

void printtree(void **node,VISIT order,int depth)

{

char *str;

str=*(char**)node;

if(order==postorder || order==leaf)

printf("string:%s\n",str);

}

VISIT은 enum으로 열거형 자료타입 입니다.

typedef enum{preorder,postorder,endorder,leaf}VISIT;

반응형

'프로그래밍' 카테고리의 다른 글

fork와 thread의 차이점  (0) 2008.04.28
간단한 thread 함수 예제  (0) 2008.04.28
hungarian prefix  (0) 2008.04.26
break와 continue  (0) 2008.04.25
argc, argv에 대해..  (0) 2008.04.25
Posted by pmj0403