实现功能 添加 查找 删除 修改 显示
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define S 20
#define LEN sizeof(CLASS)
typedef struct cl
{
int classnum;
char name[S];
char birth[S];
char phone[S];
struct cl *left,*right;
}CLASS;
CLASS *C;
void init_class()
{
C = NULL;
}
CLASS *add_class(int num,char n[],char b[],char p[],CLASS *A) // 添加同学
{
if(A == NULL) //判断根结点是否有人 没有则插入信息
{
A = (CLASS *)malloc(LEN);
A->classnum = num;
strcpy(A->name,n);
strcpy(A->birth,b);
strcpy(A->phone,p);
A->left = NULL;
A->right = NULL;
}
else
{
if(num < A->classnum) //插入的学号比 A 节点上的学号小 则插入到A节点的左孩子上
{
A->left = add_class(num,n,b,p,A->left);
}
else if(num > A->classnum) // 大 插入到右孩子
{
A->right = add_class(num,n,b,p,A->right);
}
else if(num = A->classnum) // 相等时 说明已存在 插入失败
{
printf("添加失敗!学号为%d的同学已经存在,该同学是%s\n",num,A->name);
}
}
return A;
}
void ShowTree_f(CLASS* T) //前序遍历
{
if (T != NULL)
{
printf("\t%d\t", T->classnum);
printf("%s\t", T->name);
printf("%s\t", T->birth);
printf("%s\n", T->phone);
ShowTree_f(T->left);
ShowTree_f(T->right);
}
}
void ShowTree_m(CLASS* T) // 中序遍历
{
if (T != NULL)
{
ShowTree_m(T->left);
printf("\t%d\t", T->classnum);
printf("%s\t", T->name);
printf("%s\t", T->birth);
printf("%s\n", T->phone);
ShowTree_m(T->right);
}