Bst Search

페이지 정보

작성자 에렐리앙 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 댓글 0건 조회 3,076회 작성일 09-10-26 20:13

본문

/****************************
 * file : bstree.c
 ****************************/
#include "search.h"

static int bst_total_cnt = 0;	/* 총 데이터의 수 */
static int bst_dup_cnt = 0;		/* 중복된 데이터를 제외한 데이터의 수 */
static LINT bst_cmp_cnt = 0;		/* 알고리즘 효율을 알아보기 위해 비교횟수를 셈 */

LINT bst_cmp_count(){	/* 비교 횟수 */
	return bst_cmp_cnt;
}
int bst_total_count(){
	return bst_total_cnt;
}
int bst_dup_count(){
	return bst_dup_cnt;
}

/*****************************
 *	트리정보 초기화 및 생성
 *****************************/
bst_t *newNode(char *data){
	bst_t *tmp;
	char *str_tmp;
	bst_dup_cnt++;/* 노드는 중복되어 생성 안되기 때문에 */
	if((tmp = (bst_t*)malloc(sizeof(bst_t))) == NULL){
		fprintf(stderr, "Memory allocate fail\n");
		return NULL;
	}
	str_tmp = (char *)malloc(strlen(data)+1);	/* string len + NULL */
	strcpy(str_tmp, data);
	tmp->left = NULL;
	tmp->right = NULL;
	tmp->data.data = str_tmp;
	tmp->data.cnt = 1;
	bst_total_cnt++; /* 총 데이터 수 */
	return tmp;
}


/*************************************************************************
 *	#include <string.h>
 *	int strcmp(const char *s1, const char *s2);
 *	s2 < s1  => -
 *	s2 > s1  => +
 *	s2 == s1 => 0
 *************************************************************************/
void addBST(bst_t **root, char *data){
	int datacmp;
	if((*root) == NULL){
		bst_cmp_cnt++;
		(*root) = newNode(data);
	}else {
		datacmp = strcmp((*root)->data.data,data);
		bst_cmp_cnt++;	/* 데이터 총 비교 횟수 */
		if(datacmp == 0) {
			((*root)->data.cnt)++;
			bst_total_cnt++; /* 총 데이터 수 */
		}
		else if(datacmp > 0)
			addBST(&((*root)->left), data);
		else 
			addBST(&((*root)->right), data);
	}
	return ;
}


/**********************************************
 * 트리에 저장된 값을 출력 해주는 함수
 * "책제목, 저자명, 중복된 책수"를 
 * 표 형식으로 출력 해줌
 **********************************************/
void printBST(bst_t *root){
	if(root){
		printBST(root->left);
		printTable(&(root->data));/* 표 형식으로 출력 해주는 함수 */
		printBST(root->right); 
	}
	return;
}

void algoBST(bst_t *root, int level){
	int i;
	if(root){
		algoBST(root->left, level+1);
		for(i = 0; i < level; i++) printf("      ");
		printf("%s\n", "P");
		algoBST(root->right, level+1);
	}
}
/* Memory allocate free function */
void freeBST(bst_t *root){
	if(root){
		printBST(root->left);
		printBST(root->right);
		free(root->data.data);
		free(root);
	}
}
[이 게시물은 에렐리안님에 의해 2017-06-13 19:35:54 멤버게시판에서 이동 됨]

답변목록

등록된 답변이 없습니다.

Total 67건 4 페이지
게시물 검색
번호 제목 글쓴이 조회 날짜
22 에렐리앙 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 3126 11-08-08
21 에렐리앙 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 3310 11-01-07
20 에렐리앙 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 3315 10-12-20
19 에렐리앙 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 3302 09-12-09
열람중 에렐리앙 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 3077 09-10-26
17 에렐리앙 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 3299 09-10-19
16 에렐리앙 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 3211 09-10-05
15 에렐리앙 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 7 09-05-07
14 에렐리앙 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 3237 09-04-13
13 에렐리앙 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 9 09-04-06
12 에렐리앙 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 3231 09-02-28
11 에렐리앙 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 2960 09-02-19
10 에렐리앙 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 3166 09-02-19
9 에렐리앙 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 2929 09-02-19
8 에렐리앙 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 3059 09-02-19