C语言实现树的动态查找实例代码分享

—-想了解C语言实现树的动态查找实例代码分享的全部内容且更多的C语言教程关注<计算机技术网(www.ctvol.com)!!>

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("%sn",r->name);    print(r->right);  }     void print_currentData(struct tree *point)  {    if(point == NULL)      return;    printf("  姓名:%sn",point->name);    printf("  城市:%sn",point->city);    printf("  性别:%sn",point->sex);    printf("  年龄:%sn",point->age);    printf("  工作:%sn",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;  }  

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/488197.html

(0)
上一篇 2020年11月12日
下一篇 2020年11月12日

精彩推荐