• 大小: 6KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-03
  • 语言: C/C++
  • 标签: C++  二叉树  

资源简介

使用C++的二叉搜索树实现学生成绩管理系统,代码内包含完整的系统

资源截图

代码片段和文件信息

#include
#include
#include
using namespace std;
struct stuinfo //学生信息结构体
{
char name[20];
double math;
double chin;
};
struct infonode //二叉搜索树的节点
{
stuinfo info;
infonode *left;
infonode *right;
};
class BST //二叉搜索树的类表示
{
public:
BST(); //构造函数
void input(ifstream &); //输入函数,实质是插入函数
infonode * insert(stuinfo pinfonode *q); //插入操作的递归实现
void inorder(infonode *pofstream &); //中序输出
void file3(ifstream &); //处理第三个输入文件
void del(infonode *pstuinfo inf); //删除操作
void file4(ifstream &ofstream &); //处理第四个输入文件
void search(infonode *ofstream &doubledouble double double);//查找操作
void pre(infonode *); //寻找所给节点的直接前驱,并将给定节点所在子树置空
infonode *root; //根节点
bool cm; //1是数学,0是语文
};
BST::BST()
{
root=NULL;
}

void BST::input(ifstream &in)
{
while(!in.eof())
{
stuinfo tem;
in>>tem.name;
in>>tem.chin;
in>>tem.math;
insert(temroot); //调用insert函数
}
}
infonode *BST::insert(stuinfo pinfonode *q)
{
if(root == NULL)
{
root=new infonode;
root->info.math=-1; //标记math=-1为叶子结点
root= insert(proot); //调用insert2函数
}
else
{
if(q->info.math == -1)
{
q->info=p;
q->left=NULL;
q->right=NULL;
return q;
}
else
{
if(cm) //是数学树
{
if(q->info.math < p.math) //数学树按照数学成绩进行插入
{
if(q->right == NULL) //遇空
{
q->right=new infonode;
q->right->left=NULL;
q->right->right=NULL;
q->right->info.math=-1;
}
insert(pq->right); //递归调用
}
else
{
if(q->left == NULL)
{
q->left=new infonode;
q->left->left=NULL;
q->left->right=NULL;
q->left->info.math=-1;
}
insert(pq->left);
}
}
else //语文树
{
if(q->info.chin < p.chin)
{
if(q->right == NULL)
{
q->right=new infonode;
q->right->left=NULL;
q->right->right=NULL;
q->right->info.math=-1;
}
insert(pq->right);
}
else
{
if(q->left == NULL)
{
q->left=new infonode;
q->left->left=NULL;
q->left->right=NULL;
q->left->info.math=-1;
}
insert(pq->left);
}
}
}
}
return NULL;
}
void BST::inorder(infonode *p ofstream &out)
{
if(p == NULL)
return;
else
{
inorder(p->leftout); //中序输出的递归实现
out<info.name<<‘ ‘<info.chin<<‘ ‘<info.math< inorder(p->rightout);
}
}
void BST::file3(ifstream &in)
{
while(!in.eof())
{
stuinfo tem;
in>>tem.name;
in>>tem.chin;
in>>tem.math;
del(roottem);
}
}
void BST::del(infonode *pstuinfo inf)
{
if(p == NULL)
return;
else if(inf.chin == p->info.chin && inf.math == p->info.math) //如果匹配,则进行删除操作
{
if(p->left == NULL && p->right == NULL) //如果没有子树
{
pre(p); //找到前驱并将前驱的子树置空
delete p;
p=NULL;
}
else if(p->left

评论

共有 条评论