资源简介
使用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
- 上一篇:c语言winsock 实现简单域名解析(DNS
- 下一篇:七参数坐标转换C语言代码
相关资源
- 国际象棋的qt源代码
- C++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- VC++MFC小游戏实例教程(实例)+MFC类库
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- C++ mqtt 用法
- 商品库存管理系统 C++ MFC
- c++ 多功能计算器
- C++17 In Detail
- 嵌入式QtC++编程课件
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
- c++ 画图(14Qt-XPS)
- c++多边形交并差运算
评论
共有 条评论