资源简介
使用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语言代码
相关资源
- 狼吃羊C++代码
- 语音识别系统源码
- libstdc++-3.4.6-9.i386_libstdc++-3.4.6-11.x86_
- C++ Builder DLL
- windows下c实现telnet代码
- 梯度下降求函数极值C++代码
- VC++ 串口调试助手源代码
- 基于QtQuick的QCustomPlot实现
- 04737 C++程序设计 精讲 串讲 笔记 音频
- 矩阵类的运算符重载
- vc++做的考试系统c/s模式
- KCF跟踪算法c++
- ftp的C++源码实现,可以进行文件传输
- c++实现计算器
- VC++ 向指定串口发送和接收数据可十六
- 数据结构课程设计CC++描述[阮宏一][程
- vc++FTP搜索工具()
- 基于VC++的图像修复源代码
- Google C++编码规范
- 简单电梯c++实现
- AES/ECB/PKCS5Padding C++实现
- c++商品管理
- 打印出有向图中的所有环C++
- cocos2dx 3.17 2048游戏的源码
- C++中缀表达式求值
- 一个数字水印的VC++源程序,支持图片
- C++大学教程(第七版)](美)戴特尔
- Visual C++串口通信
- 蜘蛛纸牌VC++
- k-means 源代码C++实现
评论
共有 条评论