二叉排序树C语言实现(记录)

#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);
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值