资源简介
C语言 二叉平衡树实现学生管理系统,用文件保存学生信息,可以实现学生信息的显示、查找、插入、删除、保存等。
代码片段和文件信息
#include
#include
#include
#include
#include
# define LH 1
# define EH 0
# define RH -1
# define TRUE 1
# define FALSE 0
# define MAX 30
bool taller=0; //插入时反映树是否长高0不长高 1长高
bool shorter; //删除时时反映树是否长高0不长高 1长高
typedef struct stu//学生信息
{
int num; //学号
char name[15]; //姓名
int Class; //班级
char sex; //性别
char addr[15]; //家庭住址
}student;
typedef struct BSTNode //结点结构
{
student stu;
int bf; //平衡因子
struct BSTNode * lchild * rchild;
}BSTNode *BSTree;
BSTree R_Rotate(BSTree p)
{ // 对以*p为根的二叉排序树作右旋处理,处理之后p指向新的树根结点,即旋转
// 处理之前的左子树的根结点。
BSTNode *lc;
lc=p->lchild;
p->lchild=lc->rchild;
lc->rchild=p;
p=lc;
return p;
} /*R_Rotate*/
BSTree L_Rotate(BSTree p)
{ // 对以*p为根的二叉排序树作左旋处理,处理之后p指向新的树根结点,即旋转
// 处理之前的右子树的根结点。
BSTNode *rc;
rc=p->rchild;
p->rchild=rc->lchild;
rc->lchild=p;p=rc;
return p;
}/*L_Rotate*/
BSTree LeftBalance(BSTree T)
{ // 对以指针T所指结点为根的二叉树作左平衡旋转处理,本算法结束时,
// 指针T指向新的根结点。
BSTNode *lc*rd;
lc=T->lchild;
switch(lc->bf)
{ // 检查*T的左子树的平衡度,并作相应平衡处理
case LH: // 新结点插入在*T的左孩子的左子树上,要作单右旋处理
T->bf=lc->bf=EH;
T=R_Rotate(T);
break;
case RH: // 新结点插入在*T的左孩子的右子树上,要作双旋处理
rd=lc->rchild;
switch(rd->bf)
{ // 修改*T及其左孩子的平衡因子
case LH:
T->bf=RH;
lc->bf=EH;
break;
case EH:
T->bf=lc->bf=EH;
break;
case RH:
T->bf=EH;
lc->bf=LH;
break;
}
rd->bf=EH;
T->lchild=L_Rotate(T->lchild);
T=R_Rotate(T);
}
return T;
}
BSTree RightBalance(BSTree T)
{ // 对以指针T所指结点为根的二叉树作右平衡旋转处理,本算法结束时,
// 指针T指向新的根结点
BSTree rcld;
rc=T->rchild;
switch(rc->bf)
{ // 检查*T的右子树的平衡度,并作相应平衡处理
case RH: // 新结点插入在*T的右孩子的右子树上,要作单左旋处理
T->bf=rc->bf=EH;
T=L_Rotate(T);
break;
case LH: // 新结点插入在*T的右孩子的左子树上,要作双旋处理
ld=rc->lchild;
switch(ld->bf)
{ // 修改*T及其右孩子的平衡因子
case LH:
T->bf=LH;
rc->bf=EH;
break;
case EH:
T->bf=rc->bf=EH;
break;
case RH:
T->bf=EH;
rc->bf=RH;
break;
}
ld->bf=EH;
T->rchild=R_Rotate(T->rchild);
T=L_Rotate(T);
}
return T;
}
BSTree InsertAVL (BSTree T BSTree s)
{ // 若在平衡的二叉排序树T中不存在和e有相同关键字的结点,则插入一个
// 数据元素为e的新结点,并返回1,否则返回0。若因插入而使二叉排序树
// 失去平衡,则作平衡旋转处理,布尔变量taller反映T长高与否。
BSTree p;
if(!T)
{ // 插入新结点,树“长高”,置taller为TRUE
T=s;
T->lchild=T->rchild=NULL;
T->bf=EH;
taller=TRUE;
}
else
{
if(s->stu.num==T->stu.num)
{ // 树中已存在和e有相同关键字的结点则不再插入
// printf(“插入的学生已存在!!!“);
taller=FALSE;
return N
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 50176 2012-04-25 14:00 二叉平衡树学生管理\Debug\vc60.idb
文件 69632 2011-07-04 18:32 二叉平衡树学生管理\Debug\vc60.pdb
文件 66560 2011-07-03 16:36 二叉平衡树学生管理\Debug\二叉平衡树学生管理.bsc
文件 196688 2011-07-04 18:32 二叉平衡树学生管理\Debug\二叉平衡树学生管理.exe
文件 273056 2011-07-04 18:32 二叉平衡树学生管理\Debug\二叉平衡树学生管理.ilk
文件 29877 2011-07-04 18:32 二叉平衡树学生管理\Debug\二叉平衡树学生管理.obj
文件 232500 2011-07-04 17:50 二叉平衡树学生管理\Debug\二叉平衡树学生管理.pch
文件 533504 2011-07-04 18:32 二叉平衡树学生管理\Debug\二叉平衡树学生管理.pdb
文件 0 2011-07-03 16:36 二叉平衡树学生管理\Debug\二叉平衡树学生管理.sbr
文件 320 2011-07-03 16:08 二叉平衡树学生管理\stu_list
文件 14033 2011-07-04 18:32 二叉平衡树学生管理\二叉平衡树学生管理.cpp
文件 3547 2011-07-04 17:50 二叉平衡树学生管理\二叉平衡树学生管理.dsp
文件 561 2011-07-04 19:05 二叉平衡树学生管理\二叉平衡树学生管理.dsw
文件 50176 2012-07-01 17:42 二叉平衡树学生管理\二叉平衡树学生管理.ncb
文件 48640 2012-07-01 17:42 二叉平衡树学生管理\二叉平衡树学生管理.opt
文件 1228 2011-07-04 18:32 二叉平衡树学生管理\二叉平衡树学生管理.plg
目录 0 2011-07-04 18:32 二叉平衡树学生管理\Debug
目录 0 2012-07-01 17:42 二叉平衡树学生管理
----------- --------- ---------- ----- ----
1570498 18
- 上一篇:操作系统 银行家算法 C++
- 下一篇:VC++计算机图形学制作二维图形变换代码
相关资源
- C语言学生管理系统(带文本数据库)
- 计算机网络编程vc++学生管理系统
- 学生管理系统c++
- C++ Builder + Access 学生管理系统数据库
- c++学生成绩管理系统课程设计
- 学生管理系统,有两个类,本科生和
- 链表学生管理系统-数据结构
- 简易学生管理系统(C++)
- 二叉排序树 学生管理系统
- 学生签到管理系统C++版本
- 学生管理系统,mfc做的,本人课设作
- 基于OC语言的学生管理系统实现了增删
- 详细学生管理系统源代码
- 学院学生管理系统C语言 数据结构 文
- 学生教师管理系统OC
- C语言课程设计大作业-学生管理系统含
- 学生管理系统的设计与实现
- C++版学生管理系统
- C++大作业_学生管理系统(含源代码实
- mfc学生管理系统112034
- C++大作业之学生管理系统图表
- Qt实现学生管理系统
- 基于C++的学生管理系统
- MFC学生管理系统
- 学生管理系统模板.docx
- C语言作业:学生管理系统EasyX版
- C/C++ 学生管理系统源码(控制台)
- c语言学生管理系统源码(基于codebl
- c++ 学生管理系统源码(mysql数据库)
- c++ 学生成绩管理系统
评论
共有 条评论