课程设计报告
read left1 create insert right2 left1 insret right2 change left2 delete1 main right2 delete2 find Print display male fmale save
5
课程设计报告
(四)、详细设计
为了实现概要设计中定义的所有的数据类型;对主程序和其他模块写出伪代码算法或者画出流程图;
1) 结点类型和指针类型
typedef struct A { char NO[10]; char name[10]; char birt[10]; char clas[10]; char sex[2]; }Elemtype; typedef struct B { Elemtype data; int bf; struct B *lchild; struct B *rchild; }node,*pnode;
2) 主要算法的伪代码
1. 二叉平衡树的遍历
二叉平衡树的显示,查找,结点信息修改,保存等操作均基于二叉平衡树的遍历操作,代码如下 if (ptree) {
display(ptree->lchild); printf( );
display(ptree->rchild); }
2. 二叉平衡树的插入操作代码
int insert(pnode &ptree,Elemtype e,int &taller) {if (ptree==NULL) { ptree=new node; ptree->data=e;
ptree->lchild=ptree->rchild=NULL; ptree->bf=0; taller=1;} else
{if (strcmp(e.NO,ptree->data.NO)==0)
6
课程设计报告
{
taller=0;return 0;}
if(strcmp(e.NO,ptree->data.NO)<0)
{if((insert(ptree->lchild,e,taller))==0) return 0; if(taller==1)
eft1(ptree,taller);} else{
if((insert(ptree->rchild,e,taller))==0) return 0; if(taller==1)
right1(ptree,taller);}} return 1;}
3. 二叉平衡树的删除操作代码
int delete1(pnode &ptree,char x[10],int &taller) {
if(ptree==NULL) return 0;
else if (strcmp(x,ptree->data.NO)<0) {k=delete1(ptree->lchild,x,taller); if(taller==1)
left2(ptree,taller); return k;}
else if (strcmp(x,ptree->data.NO)>0) {k=delete1(ptree->rchild,x,taller); if(taller==1)
right2(ptree,taller); return k;} else
{q=ptree;
if (ptree->rchild==NULL) {ptree=ptree->lchild; delete q;taller=1;}
else if (ptree->lchild==NULL) {ptree=ptree->rchild; delete q;taller=1;} else
{delete2(q,q->lchild,taller); if(taller==1)
left2(q,taller); ptree=q;
}return 1;}}
4. 重新从文件里读出数据并生成新的二叉平衡树的代码
void read(pnode &ptree,FILE *p) {int j;
7
课程设计报告
char c; Elemtype e;
if((p=fopen(\ return ;
while((c=fgetc(p))!=EOF)
{fscanf(p,\insert(ptree,e,j);} fclose(p);}
(五)、 调试分析
save函数以“a”的方式打开文件,利用中序遍历递归向文件写入结点信息,但下次打开文件事会读入之前文件数据,最后保存时回产生重复,会将之前文件已有的信息再次写入文件。解决方法是在调用save函数之前先以“w”方式打开文件向文件中写入“\\n”然后关闭文件,这一操作可以使文件之前的信息被“\\n”覆盖,相当于清空文件,然后就可以正常写入信息到文件。
(六)、使用说明
程序名为a12.exe,运行环境为DOS。程序执行后显示 请选择:
1------------------------载入学生信息 2------------------------重新创建信息
输入1或2选择不同的功能,选择1实现之前创建文件的读取,选择2则需要重新创建学生信息。
输入后继续显示如下
***********平衡二叉树实现学生基本信息管理*********** **************************************************** 1-----------------------------------------------创建 2-----------------------------------------------插入 3-----------------------------------------------删除 4-----------------------------------------------修改 5-----------------------------------------------查找 6-----------------------------------------------显示 7-----------------------------------------------排序 8-----------------------------------------------分组 9-----------------------------------------------保存
8
课程设计报告
0-----------------------------------------------退出 选择1:创建平衡二叉树
选择2:向平衡二叉树中插入新的结点 选择3:删除平衡二叉树中的某个结点 选择4:修改平衡二叉树的结点信息
选择5:输入学生姓名显示该学生的基本信息 选择6:凹入显示平衡二叉树
选择7:中序遍历按学号顺序输出二叉树中的结点信息 选择8:分组输出男生女生的基本信息
选择9:将以上所做改动后二叉树的结点信息存入文件中 选择0:退出结束程序
(七)、测试结果
1) 选择2重新创建学生信息,则得到以下菜单
2) 创建:选择2输入4,创建4个学生信息
9