排序二叉树兑现同学录

排序二叉树实现同学录/************************************************************************//*排

排序二叉树实现同学录

/************************************************************************/  /*               排序二叉树实现同学录                                                */  /************************************************************************/  #include <stdio.h>  #include <stdlib.h>  #include <string.h>typedef int ElemType;  typedef struct Student{      int num;  char name[20];char birthday[20];char tel[20];}Student;  typedef struct BiTNode{  struct Student stu;    struct BiTNode *lchild,*rchild;  }BiTNode,*BiTree;  int SearchBST(BiTree T,int num,BiTree f,BiTree *p,char name[]){    if(!T)    {        *p = f;return 0;    }else{    if(!strcmp(name,T->stu.name))    {        *p = T;return 1;    }else{    if(num < T->stu.num)    {         return SearchBST(T->lchild,num,T,p,name);    }else{    return SearchBST(T->rchild,num,T,p,name);}}}}void ProOrderTraverse(BiTree T){    if(T==NULL)    {            return;    }else{    printf("name:     ");    printf("num:      ");    printf("birthday  ");    printf("tel       ");    printf("\n");    printf("%-10s",T->stu.name);    printf("%-10d",T->stu.num);    printf("%-10s",T->stu.birthday);    printf("%-10s",T->stu.tel);    printf("\n");ProOrderTraverse(T->lchild);ProOrderTraverse(T->rchild);}}int InsertBST(BiTree *T,int num,char name[],char birthday[],char tel[]){    BiTree p,s;if(!SearchBST(*T,num,NULL,&p,name)){    s = (BiTree)malloc(sizeof(BiTNode));s->stu.num= num;strcpy(s->stu.name,name);strcpy(s->stu.birthday,birthday);strcpy(s->stu.tel,tel);s->lchild = s->rchild =NULL;if(!p){    *T = s;}else{    if(num<(p->stu.num))    {        p->lchild = s;    }else{    p->rchild = s;}}return 1;}else{    return 0;}    }void InsertStudent(BiTree *T){int num;    char name[20];char birthday[20];char tel[20];printf("Insert name:\n");scanf(" %s",&name);printf("Insert num:\n");scanf(" %d",&num);printf("Insert birthday:\n");scanf(" %s",&birthday);printf("Insert tel:\n");scanf(" %s",&tel);InsertBST(T,num,name,birthday,tel);//printf("\n");}int DeleteBST(BiTree *T,char name[]){    if(!*T)    {return 0;    }else{    if(!strcmp(name,(*T)->stu.name))    {return Delete(T);    }else{    return DeleteBST(&(*T)->lchild,name);    return DeleteBST(&(*T)->rchild,name);}}}int Delete(BiTree *p){    BiTree q,s;if((*p)->rchild == NULL){    q = *p;*p = (*p)->lchild;free(q);}else{    if((*p)->lchild == NULL)    {q = *p;*p = (*p)->rchild;free(q);    }else{q = *p;s = (*p)->lchild;while(s->rchild){    q = s;s = s->rchild;}(*p)->stu.num=s->stu.num;strcpy((*p)->stu.name,s->stu.name);strcpy((*p)->stu.birthday,s->stu.birthday);strcpy((*p)->stu.tel,s->stu.tel);if(q != *p){    q->rchild = s->lchild;}else{    q->lchild = s->lchild;}free(s);}}return 1;}void DeleteStudent(BiTree *T){    char name[20];printf("Delete the name:\n");scanf(" %s",&name);DeleteBST(T,name);}int AlterBST(BiTree *T,char name[]){    if(!*T)    {return 0;    }else{    if(!strcmp(name,(*T)->stu.name))    {return Alter(T);    }else{    return AlterBST(&(*T)->lchild,name);    return AlterBST(&(*T)->rchild,name);}}}int Alter(BiTree *p){int num;    char name[20];char birthday[20];char tel[20];printf("name:  ");printf("num:  ");printf("birthday  ");printf("tel   ");printf("\n");printf("%-10s",(*p)->stu.name);printf("%-10d",(*p)->stu.num);printf("%-10s",(*p)->stu.birthday);printf("%-10s",(*p)->stu.tel);printf("\n");printf("Alter the name to:\n");scanf(" %s",&name);printf("Alter the num to:\n");scanf(" %d",&num);printf("Alter the birthday to:\n");scanf(" %s",&birthday);printf("Alter the tel to:\n");scanf(" %s",&tel);(*p)->stu.num=num;strcpy((*p)->stu.name,name);strcpy((*p)->stu.birthday,birthday);strcpy((*p)->stu.tel,tel);return 1;}void AlterStudent(BiTree *T){char name[20];printf("Alter the name:\n");scanf(" %s",&name);AlterBST(T,name);}int main()  {      int i;//int num=101010;    //char name[20]="chen";//char birthday[20]="1990-1-1";//char tel[20]="1234567890";BiTree T=NULL;while(1){printf("1.Show student\n");printf("2.Insert student\n");printf("3.Delete student\n");printf("4.Alter student\n");        do        {scanf(" %d",&i);        }while(i!=1&&i!=2&&i!=3&&i!=4);system("clear");switch(i){    case 1:{ProOrderTraverse(T);break;}    case 2:{ProOrderTraverse(T);InsertStudent(&T);break;}case 3:{ProOrderTraverse(T);DeleteStudent(&T);ProOrderTraverse(T);break;}case 4:{ProOrderTraverse(T);AlterStudent(&T);break;}default:{break;}}}    return 0;  }