-
Notifications
You must be signed in to change notification settings - Fork 0
/
dataStructure_BST.c
117 lines (94 loc) · 2.2 KB
/
dataStructure_BST.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include "dataStructure_BST.h"
static PERSONLIST personList;
static STRING matchString;
static int memberCount = 0;
static int memberIdMax = 0;
static NODE * rootNode = NULL;
PERSON * findMemberById(int memberId)
{
NODE * node = findNode(rootNode, memberId);
if (node == NULL)
return NULL;
return node->value->member;
}
static void addMemberToList(PERSON * member)
{
personList.member[personList.memberCnt++] = member;
}
static int checkStringMatch(STRING string)
{
return !strcmp(string, matchString);
}
void getMemberListByAll(NODEDATA * value)
{
addMemberToList(value->member);
}
PERSONLIST getMemberList()
{
personList.memberCnt = 0;
traverseNode(rootNode, getMemberListByAll);
return personList;
}
void getMemberListByName(NODEDATA * value)
{
if (checkStringMatch(value->member->name))
addMemberToList(value->member);
}
void getMemberListByPhone(NODEDATA * value)
{
if (checkStringMatch(value->member->phone))
addMemberToList(value->member);
}
PERSON * findMemberByName(STRING name)
{
personList.memberCnt = 0;
matchString = name;
traverseNode(rootNode, getMemberListByName);
if (personList.memberCnt == 0)
return NULL;
else if (personList.memberCnt == 1)
return personList.member[0];
else
return choiceDuplicatedOne(personList);
}
PERSON * findMemberByPhone(STRING phone)
{
personList.memberCnt = 0;
matchString = phone;
traverseNode(rootNode, getMemberListByPhone);
if (personList.memberCnt == 0)
return NULL;
else if (personList.memberCnt == 1)
return personList.member[0];
else
return choiceDuplicatedOne(personList);
}
void insertMember(PERSON * member)
{
NODEDATA * nodeData = malloc(sizeof(NODEDATA));
nodeData->member = member;
if (memberIdMax < member->memberId)
memberIdMax = member->memberId;
if (rootNode == NULL)
{
rootNode = createNode(member->memberId, nodeData);
return;
}
insertNode(rootNode, member->memberId, nodeData);
}
void removeMemberById(int memberId)
{
NODE * node = findNode(rootNode, memberId);
if (node == rootNode)
{
node->parent = createNode(-1, NULL);
node->parent->right = rootNode;
deleteNode(rootNode, memberId);
rootNode = node->parent->right;
}
deleteNode(rootNode, memberId);
}
int getMemberIdMax()
{
return memberIdMax;
}