[데이터 구조] 이 진 트 리 를 검색 하 는 key - value 모델

글 목록
  • 1. key - value 모델 로 한 단어 가 맞 춤 법 이 정확 한 지 판단 하고 번역 을 표시 합 니 다.
  • BSVTree.h
  • BSVTree.c
  • 2. key - value 모델 로 입력 단어 가 반복 되 는 횟수 를 구 합 니까?
  • BSVTree.h
  • BSVTree.c

  • 1. key - value 모델 로 한 단어의 맞 춤 법 이 정확 한 지 판단 하고 번역 을 표시 합 니 다.
    BSVTree.h
    #pragma once
    
    #include 
    #include 
    #include 
    #include 
    #include 
    
    typedef char* BSTKeyType;
    typedef char* BSTValueType;
    
    typedef struct BSTreeNode
    {
    	struct BSTreeNode* _left;
    	struct BSTreeNode* _right;
    	BSTKeyType _key;
    	BSTValueType _value;
    }BSTreeNode;
    
    int BSTreeInsert(BSTreeNode** ppTree, BSTKeyType key, BSTValueType value);
    int BSTreeRemove(BSTreeNode** ppTree, BSTKeyType key);
    BSTreeNode* BSTreeFind(BSTreeNode** ppTree, BSTKeyType key);
    void BSTreeInOrder(BSTreeNode** ppTree);
    void TestBSTree1();
    

    BSVTree.c
    #define  _CRT_SECURE_NO_WARNINGS 0
    
    
    #include "BSVTree.h"
    
    
    // key/value
    
    
    BSTreeNode* BuyBSTreeNode(BSTKeyType key, BSTValueType value)
    {
    	BSTreeNode* node = (BSTreeNode*)malloc(sizeof(BSTreeNode));
    	node->_left = NULL;
    	node->_right = NULL;
    	node->_key = (BSTKeyType)malloc(strlen(key) + 1);
    	strcpy(node->_key, key);
    	node->_value = value;
    
    	return node;
    }
    
    int BSTreeInsert(BSTreeNode** ppTree, BSTKeyType key, BSTValueType value)
    {
    	BSTreeNode* cur = *ppTree;
    	BSTreeNode* parent = NULL;
    	if (*ppTree == NULL)
    	{
    		*ppTree = BuyBSTreeNode(key, value);
    		return 1;
    	}
    	while (cur)
    	{
    		if (strcmp(cur->_key, key) > 0)
    		{
    			parent = cur;
    			cur = cur->_left;
    		}
    		else if (strcmp(cur->_key, key) < 0)
    		{
    			parent = cur;
    			cur = cur->_right;
    		}
    		else
    		{
    			return 0;
    		}
    	}
    	if (strcmp(parent->_key, key) < 0)
    	{
    		parent->_right = BuyBSTreeNode(key, value);
    	}
    	else
    	{
    		parent->_left = BuyBSTreeNode(key, value);
    	}
    
    	return 1;
    }
    
    BSTreeNode* BSTreeFind(BSTreeNode** ppTree, BSTKeyType key)
    {
    	BSTreeNode* cur = *ppTree;
    	while (cur)
    	{
    		if (strcmp(cur->_key, key) < 0)
    		{
    			cur = cur->_right;
    		}
    		else if (strcmp(cur->_key, key) > 0)
    		{
    			cur = cur->_left;
    		}
    		else
    		{
    			return cur;
    		}
    	}
    
    	return NULL;
    }
    
    void BSTreeInOrder(BSTreeNode** ppTree)
    {
    	BSTreeNode* root = *ppTree;
    	if (*ppTree == NULL)
    	{
    		return;
    	}
    
    	BSTreeInOrder(&root->_left);
    	printf("%s:%d
    ", root->_key, root->_value); BSTreeInOrder(&root->_right); } void TestBSTree1() { char str[10]; BSTreeNode* pTree = NULL; BSTreeInsert(&pTree, "insert", " "); BSTreeInsert(&pTree, "sort", " "); BSTreeInsert(&pTree, "find", " "); BSTreeInsert(&pTree, "tree", " "); BSTreeInsert(&pTree, "destory", " "); while (1) { scanf("%s", str); if (BSTreeFind(&pTree, str)) { printf("
    "); printf("%s
    ", BSTreeFind(&pTree, str)->_value); } else { printf("
    "); } } } int main() { TestBSTree1(); system("pause"); return 0; }

    2. key - value 모델 로 입력 단어 가 반복 되 는 횟수 를 구 합 니까?
    BSVTree.h
    #pragma once
    
    #include 
    #include 
    #include 
    #include 
    #include 
    
    typedef char* BSTKeyType;
    typedef char* BSTValueType;
    
    typedef struct BSTreeNode
    {
    	struct BSTreeNode* _left;
    	struct BSTreeNode* _right;
    	BSTKeyType _key;
    	BSTValueType _value;
    }BSTreeNode;
    
    int BSTreeInsert(BSTreeNode** ppTree, BSTKeyType key, BSTValueType value);
    int BSTreeRemove(BSTreeNode** ppTree, BSTKeyType key);
    BSTreeNode* BSTreeFind(BSTreeNode** ppTree, BSTKeyType key);
    void BSTreeInOrder(BSTreeNode** ppTree);
    void TestBSTree1();
    

    BSVTree.c
    #define  _CRT_SECURE_NO_WARNINGS 0
    
    
    #include "BSVTree.h"
    
    
    // key/value
    
    
    BSTreeNode* BuyBSTreeNode(BSTKeyType key, BSTValueType value)
    {
    	BSTreeNode* node = (BSTreeNode*)malloc(sizeof(BSTreeNode));
    	node->_left = NULL;
    	node->_right = NULL;
    	node->_key = (BSTKeyType)malloc(strlen(key) + 1);
    	strcpy(node->_key, key);
    	node->_value = value;
    
    	return node;
    }
    
    int BSTreeInsert(BSTreeNode** ppTree, BSTKeyType key, BSTValueType value)
    {
    	BSTreeNode* cur = *ppTree;
    	BSTreeNode* parent = NULL;
    	if (*ppTree == NULL)
    	{
    		*ppTree = BuyBSTreeNode(key, value);
    		return 1;
    	}
    	while (cur)
    	{
    		if (strcmp(cur->_key, key) > 0)
    		{
    			parent = cur;
    			cur = cur->_left;
    		}
    		else if (strcmp(cur->_key, key) < 0)
    		{
    			parent = cur;
    			cur = cur->_right;
    		}
    		else
    		{
    			return 0;
    		}
    	}
    	if (strcmp(parent->_key, key) < 0)
    	{
    		parent->_right = BuyBSTreeNode(key, value);
    	}
    	else
    	{
    		parent->_left = BuyBSTreeNode(key, value);
    	}
    
    	return 1;
    }
    
    BSTreeNode* BSTreeFind(BSTreeNode** ppTree, BSTKeyType key)
    {
    	BSTreeNode* cur = *ppTree;
    	while (cur)
    	{
    		if (strcmp(cur->_key, key) < 0)
    		{
    			cur = cur->_right;
    		}
    		else if (strcmp(cur->_key, key) > 0)
    		{
    			cur = cur->_left;
    		}
    		else
    		{
    			return cur;
    		}
    	}
    
    	return NULL;
    }
    
    void BSTreeInOrder(BSTreeNode** ppTree)
    {
    	BSTreeNode* root = *ppTree;
    	if (*ppTree == NULL)
    	{
    		return;
    	}
    
    	BSTreeInOrder(&root->_left);
    	printf("%s:%d
    ", root->_key, root->_value); BSTreeInOrder(&root->_right); } void TestBSTree1() { char str[10] = { '0' }; BSTreeNode* pTree = NULL; while (1) { BSTreeNode* node; scanf("%s", str); if (strcmp(str, "exit") == 0) { break; } node = BSTreeFind(&pTree, str); if (node) { node->_value++; } else { BSTreeInsert(&pTree, str, 1); } } BSTreeInOrder(&pTree); } int main() { TestBSTree1(); system("pause"); return 0; }

    좋은 웹페이지 즐겨찾기