#include<stdio.h>
#define N 100
typedef struct
{
int number;
char name[5];
char sex[2];
int age;
}record;
typedef struct bnode
{
record stu;//数据
struct bnode *lchild, *rchild;//左右子树
}bnode;
//插入
void insert(bnode*& T, record e)
{
bnode *S;
if (!T)//二叉排序树空
{
S = new bnode;
S->stu = e;
S->lchild = S->rchild = NULL;
T = S;
}
else if (e.number < T->stu.number)//小于插入左子树
insert(T->lchild, e);
else insert(T->rchild, e);//大于插入右子树
}
//建立二叉排序树
void create(bnode*& T)
{
T = NULL; record e;
printf("请依次输入(学号为0视为终止):\n");
printf("学号 姓名 性别 年龄\n");
scanf("%d %s %s %d", &e.number,e.name, e.sex, &e.age);
while (e.number != 0)//学号为0为终止条件
{
insert(T, e);//插入的方式建立
scanf("%d %s %s %d", &e.number, e.name, e.sex, &e.age);
}
}
//查找
bnode* search(bnode*T,int number)
{
bnode*p = T; bnode*f = NULL;
while (p)
{
if (p->stu.number == number)break;
if (p->stu.number > number)p = p->lchild;
else p = p->rchild;
}
return p;
}
//打印菜单
void print(bnode *&T)
{
int n; bnode *p; record e;
printf("********************************************\n");
printf(" 1.建立二叉排序树\n");
printf(" 2.插入学生信息\n");
printf(" 3.查找学生信息\n");
printf("选择;");
scanf("%d", &n);
if (n == 1)
{
create(T);
printf("建立成功!\n");
}
else if (n == 2)
{
printf("请依次输入(学号为0视为终止):\n");
printf("学号 姓名 性别 年龄\n");
scanf("%d %s %s %d", &e.number, e.name, e.sex, &e.age);
insert(T, e);
printf("插入成功!\n");
}
else if (n == 3)
{
printf("输入学生学号:\n");
scanf("%d", &n);
p = search(T, n);
if (p)
{
printf("%d %s %s %d\n", p->stu.number, p->stu.name, p->stu.sex, p->stu.age);
printf("查找成功!\n");
}
else printf("can not find\n");
}
}
int main()
{
bnode*T;
print(T);
print(T);
print(T);
print(T);
}
二叉排序树C语言实现(记录)
于 2023-12-03 05:21:37 首次发布