[데이터 구조] 이 진 트 리 를 검색 하 는 key - value 모델
5941 단어 신병 의 날 카 로 운 검
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;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[데이터 구조] 두 개의 질서 있 는 단일 체인 표 교 집합 (차 집합) 을 구하 십시오.글 목록 1. 두 개의 질서 있 는 단일 체인 표 의 교 집합 2. 두 개의 질서 있 는 단일 체인 표 의 집합 단일 체인 테이블 의 실현:https://blog.csdn.net/weixin_41892460/arti...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.