Title: Data Structure in C - ????
1Data Structure in C -
????
2??
- ???? - ????
- ???? - ???
- ???
- ?????
- ?????
- ??
3???? -????
- ????
- ??(node)??(edge)
- ??(ancestor)?????(descendant)??
- ???(parent node)????(children node)
- ????(sibling node)
- ?????(non-terminal node)
- ????(terminal node)?????(leaf node)
- ???(degree)
- ??(level)
- ??(path)
4A?K?????,K?A?????
A?B, C, D????,B, C, D?A????
B, C, D?????
J, K, L, G, M, N, I?????,????????????
A?????3
?B??,???2,???1
5???? -???? (?)
- ???(Forest)???
- ???n gt 0???????(disjoint trees)??????,???????????
6???? - ???
- ????? (p. 3)
- ?????
- ???????????????
- Ex. ?p.3??????(A(B(E(J), F(K, L)), C(G), D(H(M,
N), I)) - ?? - ?????
- ???????????(???)??,????????,????????? ?
??-??(left child-right sibling)???
7???? - ??? (?)
- ???????????(left most)????????(closest right)????
- ??????????????????
8???? - ??? (?)
- ?????2????
- ???-?????????????????45???
9???
- ???(binary tree)
- ???????????????,??????????????????????(right
subtree)????(left subtree) - ??(?????????)
- ????????????(???????????)
- ???????????(??????)
- ???????????????2 (??????)
10??? (?)
????? (fully binary tree)
??? (left skewed tree)
????? (complete binary tree)
11??? (?)
- ??
- ???????i?????????2i-1,igt1
- ????(???)?k????,2k-1,kgt1
- ?????,?n0?????????,n2????????2???,n0n21
- ???
- ???????
- ??????,???????,???????
- ???????,???????????,????????????
12??? (?)
13- ?????
- ???????????????
- ?????????????(parent)
- ???????????????PARENT,?????????
typedef struct node tree_pointer typedef struct
node int data tree_pointer
left_child, right_child
14??? (?)
- ?????(traversal)
- ???????????,????????????
- ????
- ????(inorder)??????(L????),??????(V??,????),???
???(R????) - ????(preorder)?????(V) ,???????(L) ,??????(R)
- ????(postorder)??????(L) ,???????(R) ,?????(V)
15void inorder(Node type tree) if (tree !
NULL) inorder(tree-gtllink)
printf(d, tree-gtdata)
inorder(tree-gtrlink)
????A/BCDE
void preorder(Node type tree) if (tree !
NULL) printf(d, tree-gtdata)
preorder(tree-gtllink) preorder(tree-gtrlin
k)
void postorder(Node type tree) if (tree !
NULL) postorder(tree-gtllink)
postorder(tree-gtrlink) printf(d,
tree-gtdata)
????/ABCDE
????ABC/DE
16(No Transcript)
17- ??????????????
- ????????????,???????,?????
- ???????????????
- ????????????????????
- ?????45?
18- ????????????
- ??
- ??????????????(???45?)
- ???????????????????
- ?????45?
19??? (?)
- ??????????
- ????
- ?????????(priority)????(associativity)???????
- ??????????,??????,??????,??????????????,??????????
???
20(No Transcript)
21??? (?)
- ????????
- ????inorder?preorder?????????????
- ????inorder?postorder?????????????
- ????preorder?postorder??????????????
- ??pp. 6-706-73
22?????
- ?????(binary search tree)
- ????????????,??????,???????,??????????????(key
value),???????? - ????????????????????
- ????????????????????
- ??????????????
- ????????
- ????????(input sequence),?????????????,?????????,?
???????????
23????? (?)
- ????????
- ????????,??????,????????????,????????
??48
??90
24- / ???????,?????????????? /
- void access(char name, int score)
-
- struct student node, prev
- if(search(name) ! NULL) / ?????????? /
- printf("Student s has existed!\n", name)
- return
-
- ptr (struct student ) malloc(sizeof(struct
student)) - strcpy(ptr-gtname, name)
- ptr-gtscore score
- ptr-gtllink ptr-gtrlink NULL
25- if(root NULL) / ?????NULL??? /
- root ptr
- else / ??????NULL??? /
- node root
- while(node ! NULL) / ??????? /
- prev node
- if(strcmp(ptr-gtname, node-gtname) lt 0)
- node node-gtllink
- else
- node node-gtrlink
-
- if(strcmp(ptr-gtname, prev-gtname) lt 0)
- prev-gtllink ptr
- else
- prev-gtrlink ptr
-
26- / ??target???? /
- struct student search(char target)
-
- struct student node
- node root
- while(node ! NULL)
- if(strcmp(target, node-gtname) 0)
- return node
- else
- / target??????,???? /
- if(strcmp(target, node-gtname) lt 0)
- node node-gtllink
- else / target??????,???? /
- node node-gtrlink
-
- return node
27????? (?)
- ????????
- ?????????,??????
- ??????????,????????????????????????,?????????
28????? (?)
?????????
?????????
29- / ???????????? /
- void removing(char name)
- struct student del_node
- if((del_node search(name)) NULL) /
?????????? / - printf("Student s not found!\n", name)
- return
- / ??????????? /
- if(del_node-gtllink ! NULL del_node-gtrlink !
NULL) - del_node replace(del_node)
- else / ?????????? /
- if(del_node root)
- root NULL
- else
- connect(del_node, 'n')
- free(del_node) / ????? /
- printf("Data of student s deleted!\n", name)
30- / ?????????????? /
- struct student replace(struct student node)
- struct student re_node
- / ???????????,?????????????? /
- if((re_node search_re_r(node-gtrlink)) NULL)
- re_node search_re_l(node-gtllink)
- if(re_node-gtrlink ! NULL) / ?????????????? /
- connect(re_node, 'r')
- else
- if(re_node-gtllink ! NULL) / ??????????????
/ - connect(re_node, 'l')
- else / ????????????? /
- connect(re_node, 'n')
- strcpy(node-gtname, re_node-gtname)
- node-gtscore re_node-gtscore
- return re_node
31- / ????????? /
- struct student search_re_r(struct student node)
- struct student re_node
- re_node node
- while(re_node ! NULL re_node-gtllink ! NULL)
- re_node re_node-gtllink
- return re_node
-
- / ????????? /
- struct student search_re_l(struct student node)
- struct student re_node
- re_node node
- while(re_node ! NULL re_node-gtrlink ! NULL)
- re_node re_node-gtrlink
- return re_node
32- / ??????????,link?r???????,?l??????,
- ?m??????NULL /
- void connect(struct student node, char link)
- struct student parent
- parent search_p(node) / ????? /
- / ???????????? /
- if(strcmp(node-gtname, parent-gtname) lt 0)
- if(link 'r') / link?r /
- parent-gtllink node-gtrlink
- else
- if(link 'l') / link?l /
- parent-gtllink node-gtllink
- else / link?m /
- parent-gtllink NULL
33- else / ???????????? /
- if(link 'r') / link?r /
- parent-gtrlink node-gtrlink
- else
- if(link 'l') / link?l /
- parent-gtrlink node-gtllink
- else / link?m /
- parent-gtrlink NULL
34- / ??node???? /
- struct student search_p(struct student node)
- struct student parent
- parent root
- while(parent ! NULL)
- if(strcmp(node-gtname, parent-gtname) lt 0)
- if(strcmp(node-gtname, parent-gtllink-gtname)
0) - return parent
- else
- parent parent-gtllink
- else
- if(strcmp(node-gtname, parent-gtrlink-gtname)
0) - return parent
- else
- parent parent-gtrlink
-
- return NULL
35????? (?)
- ??????????????
- ??
- ??????????queue?
- ??????????????
- ??????????,????????????,?????????,??????????
- ????????????
- ????????,???????????????,???????stack?,???????
36?????
- ?????(threaded binary tree)
- ????????????link field?null link,????????link?????
,???link???????(thread)??? - ??????????
1. ?LBIT1?,LLINK?????
2. ?LBIT0?,LLINK???
3. ?RBIT1?,RLINK?????
4. ?RBIT0?,RLINK???
37???? (???????)
38????? (?)
- ??
- ??????????????stack,??????????????
- ????????????,????????????????????????
- ?????????????????,????????????
39????? (?)
40- void insert_right( struct tbintree
node_parent,struct tbintree node) - struct tbintree w
- node-gtrchild node_parent-gtrchild
- node-gtrbit node_parent-gtrbit
- node-gtlchild node_parent
- node-gtlbit 0
- node_parent-gtrchild node
- node_parent-gtrbit 1
- if ( node-gtrbit 1 ) /node????tree/
-
- w insucc( node )
- w-gtlchild node
-
-
????????????
41- void insert_left( struct tbintree
node_parent,struct tbintree node) - struct tbintree w
- node-gtlchild node_parent-gtlchild
- node-gtlbit node_parent-gtlbit
- node-gtrchild node_parent
- node-gtrbit 0
- node_parent-gtlchild node
- node_parent-gtlbit 1
- if ( node-gtlbit 1 ) /node ????tree/
-
- w inpred( node )
- w-gtrchild node
-
????????????
42 43-
- if ( ptr-gtlbit 0 ptr-gtrbit 0 )
- if ( ptr_parent root ) /???????/
- ptr_parent-gtlchild root
- ptr_parent-gtlbit 0
- /?????/
- else if ( ptr-gtnumber lt ptr_parent-gtnumber )
- ptr_parent-gtlchild ptr-gtlchild
- ptr_parent-gtlbit 0
-
- else /?????/
- ptr_parent-gtrchild ptr-gtrchild
- ptr_parent-gtrbit 0
-
- free(ptr)
-
?????????????
44- else if ( ptr-gtlbit 1 ptr-gtrbit 1 )
- /?ptr??????,???????????/
- ptr_pred inpred ( ptr)
- ptr_pred-gtrchild ptr-gtrchild
- ptr_pred-gtrbit ptr-gtrbit
- ptr_parent-gtlchild ptr-gtlchild
- free(ptr)
-
- else /????????/
- if ( ptr_parent root ) /??????/
- if ( ptr-gtlbit 1 )
- ptr_pred inpred(ptr)
- root-gtlchild ptr-gtlchild
- ptr_pred-gtrchild root
- else
- ptr_succ insucc(ptr)
- root-gtlchild ptr-gtrchild
- ptr_succ-gtlchild root
45- else
-
- if ( ptr-gtnumber lt ptr_parent-gtnumber )
- ptr_parent-gtlchild ptr-gtlchild
- else
- ptr_parent-gtrchild ptr-gtrchild
-
-
??????????????
46??
- ??(heap)
- ??????????,?????????????,??????????
- ??????????????(???????????)
- Heap??????,??Heap Sort
- ???????????,??heap sort???????????????
- ??,??????????????????,??????Heap,???????Stack(????
)?Queue(????)???
47- Heap???
- ????
- ?????? ,?????????,????????????,????
- ??????,???????????
48?? (?)
49- void insert_f(void)
- int id_temp
- if(last_index gt MAX) / ???????,?????? /
- printf("\n Login members are more than
d!!\n", MAX) - printf(" Please wait for a minute!!\n")
-
- else
- printf("\n Please enter login ID number ")
- scanf("d", id_temp)
- create(id_temp) / ???? /
- printf(" Login successfully!!\n")
-
-
- void create(int id_temp) / ID_TEMP????? /
- heap_treelast_index id_temp / ????????
/ - adjust_u(heap_tree, last_index) / ?????? /
50- void adjust_u(int temp, int index) /
INDEX?????????INDEX / - while(index gt 1) / ??????????? /
- if(tempindex lt tempindex/2) /
?????????,?????? / - break
- else
- exchange(tempindex, tempindex/2)
- index / 2
-
-
- void exchange(int id1, int id2) /
?????ID1?ID2????? / - int id_temp
- id_temp id1
- id1 id2
- id2 id_temp
51?? (?)
52- void delete_f(void)
- int id_temp, del_index
- if(last_index lt 1) / ?????,?????? /
- printf("\n No member to logout!!\n")
- printf(" Please check again!!\n")
-
- else
- printf("\n Please enter logout ID number ")
- scanf("d", id_temp)
- del_index search(id_temp) / ??????? /
- if(del_index 0) / ?????,?????? /
- printf(" ID number not found!!\n")
- else
- removes(del_index) / ????,?????? /
- printf(" ID number d logout!!\n", id_temp)
-
-
53- int search(int id_temp) / ?????ID_TEMP?? /
- int c_index
- for(c_index 1 c_index lt MAX c_index)
- if(id_temp heap_treec_index)
- return c_index / ????????????INDEX /
- return 0 / ??????0 /
-
- void removes(int index_temp) /
INDEX_TEMP???????INDEX / - / ????????????? /
- heap_treeindex_temp heap_treelast_index
- heap_treelast_index-- 0
- if(last_index gt 1) / ???????1?,???? /
- / ????????PARENT NODE,????? /
- if(heap_treeindex_temp gt heap_treeindex_temp
/ 2 index_temp gt 1) - adjust_u(heap_tree, index_temp)
- else / ???????CHILDEN NODE,????? /
- adjust_d(heap_tree, index_temp, last_index-1)
-
54- void adjust_d(int temp, int index1, int index2)
- / ID_TEMP??????,INDEX_TEMP???????CHILDEN
NODE?INDEX / - int id_temp, index_temp
- id_temp tempindex1
- index_temp index1 2
- / ??????INDEX??????????INDEX,????? /
- while(index_temp lt index2)
- if((index_temp lt index2) (tempindex_temp lt
tempindex_temp1)) - index_temp / INDEX_TEMP???????CHILDEN
NODE???? / - if(id_temp gt tempindex_temp) /
???????,?????? / - break
- else
- tempindex_temp/2 tempindex_temp
- index_temp 2
-
-
- tempindex_temp/2 id_temp
55?? (?)
- ??min-heap?
- max-heap?????????????????
- min-heap??????????????????