C語言實現樹的動態查找實例代碼
本例演示一種樹數據結構存儲記錄集合時的動態查找方法。首先程序通過construct()函數,利用已經存在的結構體數組數據建立一個二叉樹,建立樹的過程中,要保證每個節點的值都大于它的左子樹上節點的值而小于它右子樹所有節點的值,該函數返回建立樹的根指針;然后通過函數Search(root,name)查找,如果找到相應的數據,將其打印出來,如果沒有找到,則用戶可以選擇是否將該數據插入到樹中。
具體代碼如下:
#include <stdio.h>#include <stdlib.h> #include <string.h>#define NUM 4 struct tree{ char name[20]; char city[20]; char sex[10]; char age[10]; char job[10]; struct tree *left; struct tree *right;}; struct tree Datas[NUM]={ "Willing","Tianjing","Female","21","worker",NULL,NULL, "Tom","Beijing","Male","31","doctor",NULL,NULL, "Sun","Weifang","Male","24","student",NULL,NULL, "Marry","Shanghai","Female","19","techer",NULL,NULL}; struct tree *construct( struct tree *root, struct tree *r, struct tree *Data){ if(!r) { r = (struct tree *)malloc(sizeof(struct tree)); if(!r) { printf("內存分配失??!"); exit(0); } r->left = NULL; r->right = NULL; strcpy(r->name,Data->name); strcpy(r->city,Data->city); strcpy(r->sex,Data->sex); strcpy(r->age,Data->age); strcpy(r->job,Data->job); if(!root) return r; if(strcmp(Data->name,root->name)<0) root->left = r; else root->right = r; return r; } if(strcmp(Data->name,r->name)<0) construct(r,r->left,Data); else construct(r,r->right,Data); return root; } struct tree *Search(root,name)struct tree *root;char name[];{ struct tree *p; if(root == NULL) printf("該樹為空/n"); p = root; while(strcmp(p->name,name)!=0) { if(strcmp(p->name,name)>0) p = p->left; else p = p->right; if(p == NULL) break; } return(p);} void print(struct tree *r){ if(!r) return; print(r->left); printf("%s/n",r->name); print(r->right);} void print_currentData(struct tree *point){ if(point == NULL) return; printf(" 姓名:%s/n",point->name); printf(" 城市:%s/n",point->city); printf(" 性別:%s/n",point->sex); printf(" 年齡:%s/n",point->age); printf(" 工作:%s/n",point->job);} int main(void){ int i; char c[10]; char swap[20]; char name[20]; struct tree *root,*p; struct tree *temp; p = NULL; temp = NULL; root = NULL; for(i = 0;i<NUM;i++) root =construct(root,root,&Datas[i]); printf("現有人員資料:/n"); print(root); printf("請輸入要查找的人的名字/n"); scanf("%s",name); p = Search(root,name); if(p == NULL) { printf("沒有該人資料/n"); printf("是否要插入該人資料[y/n]/n"); scanf("%s",c); if(strcmp(c,"y")==0) { temp = (struct tree *)malloc(sizeof(struct tree)); if(!temp) { printf("內存分配失敗!"); exit(0); } printf("請輸入該人姓名:/n"); scanf("%s",swap); strcpy(temp->name,swap); printf("請輸入該人所在城市:/n"); scanf("%s",swap); strcpy(temp->city,swap); printf("請輸入該人性別[Male/Female]:/n"); scanf("%s",swap); strcpy(temp->sex,swap); printf("請輸入該人年齡:/n"); scanf("%s",swap); strcpy(temp->age,swap); printf("請輸入該人工作:/n"); scanf("%s",swap); strcpy(temp->job,swap); temp->left = NULL; temp->right = NULL; root =construct(root,root,temp); print_currentData(temp); printf("現有人員資料:/n"); root = root; print(root); } else return 0; } print_currentData(p); return 1;}
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
新聞熱點
疑難解答
圖片精選