• 大小: 243KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-04
  • 语言: C/C++
  • 标签:

资源简介

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


评论

共有 条评论