平衡二叉树学生信息管理系统程序.docx

上传人:b****3 文档编号:3683093 上传时间:2022-11-24 格式:DOCX 页数:18 大小:16.80KB
下载 相关 举报
平衡二叉树学生信息管理系统程序.docx_第1页
第1页 / 共18页
平衡二叉树学生信息管理系统程序.docx_第2页
第2页 / 共18页
平衡二叉树学生信息管理系统程序.docx_第3页
第3页 / 共18页
平衡二叉树学生信息管理系统程序.docx_第4页
第4页 / 共18页
平衡二叉树学生信息管理系统程序.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

平衡二叉树学生信息管理系统程序.docx

《平衡二叉树学生信息管理系统程序.docx》由会员分享,可在线阅读,更多相关《平衡二叉树学生信息管理系统程序.docx(18页珍藏版)》请在冰豆网上搜索。

平衡二叉树学生信息管理系统程序.docx

平衡二叉树学生信息管理系统程序

#include

#include

typedefstructA

{

charNO[10];

charname[10];

charbirt[10];

charclas[10];

charsex[2];

}Elemtype;

typedefstructB

{

Elemtypedata;

intbf;

structB*lchild;

structB*rchild;

}node,*pnode;

voidleft1(pnode&ptree,int&taller)

{

pnodep1,p2;

if(ptree->bf==0)

{

ptree->bf=1;

taller=1;

}

elseif(ptree->bf==-1)

{

ptree->bf=0;

taller=0;

}

else

{

p1=ptree->lchild;

if(p1->bf==1)

{

ptree->lchild=p1->rchild;

p1->rchild=ptree;

ptree->bf=p1->bf=0;

ptree=p1;

}

elseif(p1->bf==-1)

{

p2=p1->rchild;

p1->rchild=p2->lchild;

p2->lchild=p1;

ptree->lchild=p2->rchild;

p2->rchild=ptree;

if(p2->bf==0)

ptree->bf=p1->bf=0;

elseif(p2->bf==1)

{

p1->bf=0;

ptree->bf=-1;

}

else

{

p1->bf=1;

ptree->bf=0;

}

ptree=p2;

ptree->bf=0;

}

taller=0;

}

}

voidright1(pnode&ptree,int&taller)

{

pnodep1,p2;

if(ptree->bf==0)

{

ptree->bf=-1;

taller=1;

}

elseif(ptree->bf==1)

{

ptree->bf=0;

taller=0;

}

else

{

p1=ptree->rchild;

if(p1->bf==-1)

{

ptree->rchild=p1->lchild;

p1->lchild=ptree;

ptree->bf=p1->bf=0;

ptree=p1;

}

elseif(p1->bf==1)

{

p2=p1->lchild;

p1->lchild=p2->rchild;

p2->rchild=p1;

ptree->rchild=p2->lchild;

p2->lchild=ptree;

if(p2->bf==0)

ptree->bf=p1->bf=0;

elseif(p2->bf==-1)

{

p1->bf=0;

ptree->bf=1;

}

else

{

p1->bf=-1;

ptree->bf=0;

}

ptree=p2;

ptree->bf=0;

}

taller=0;

}

}

intinsert(pnode&ptree,Elemtypee,int&taller)

{

if(ptree==NULL)

{

ptree=newnode;

ptree->data=e;

ptree->lchild=ptree->rchild=NULL;

ptree->bf=0;

taller=1;

}

else

{

if(strcmp(e.NO,ptree->data.NO)==0)

{

taller=0;

return0;

}

if(strcmp(e.NO,ptree->data.NO)<0)

{

if((insert(ptree->lchild,e,taller))==0)

return0;

if(taller==1)

left1(ptree,taller);

}

else

{

if((insert(ptree->rchild,e,taller))==0)

return0;

if(taller==1)

right1(ptree,taller);

}

}

return1;

}

voidleft2(pnode&ptree,int&taller)

{

pnodep1,p2;

if(ptree->bf==1)

{

ptree->bf=0;

taller=1;

}

elseif(ptree->bf==0)

{

ptree->bf=-1;

taller=0;

}

else

{

p1=ptree->rchild;

if(p1->bf==0)

{

ptree->rchild=p1->lchild;

p1->lchild=ptree;

p1->bf=1;

ptree->bf=-1;

ptree=p1;

taller=0;

}

elseif(p1->bf==-1)

{

ptree->rchild=p1->lchild;

p1->lchild=ptree;

ptree->bf=p1->bf=0;

ptree=p1;

taller=1;

}

else

{

p2=p1->lchild;

p1->lchild=p2->rchild;

p2->rchild=p1;

ptree->rchild=p2->lchild;

p2->lchild=ptree;

if(p2->bf==0)

{

ptree->bf=0;

p1->bf=0;

}

elseif(p2->bf==-1)

{

ptree->bf=1;

p1->bf=0;

}

else

{

ptree->bf=0;

p1->bf=-1;

}

p2->bf=0;

ptree=p2;

taller=1;

}

}

}

voidright2(pnode&ptree,int&taller)

{

pnodep1,p2;

if(ptree->bf==-1)

{

ptree->bf=0;

taller=1;

}

elseif(ptree->bf==0)

{

ptree->bf=1;

taller=0;

}

else

{

p1=ptree->lchild;

if(p1->bf==0)

{

ptree->lchild=p1->rchild;

p1->rchild=ptree;

p1->bf=-1;

ptree->bf=1;

ptree=p1;

taller=0;

}

elseif(p1->bf==1)

{

ptree->lchild=p1->rchild;

p1->rchild=ptree;

ptree->bf=p1->bf=0;

ptree=p1;

taller=1;

}

else

{

p2=p1->rchild;

p1->rchild=p2->lchild;

p2->lchild=p1;

ptree->lchild=p2->rchild;

p2->rchild=ptree;

if(p2->bf==0)

{

ptree->bf=0;

p1->bf=0;

}

elseif(p2->bf==1)

{

ptree->bf=-1;

p1->bf=0;

}

else

{

ptree->bf=0;

p1->bf=1;

}

p2->bf=0;

ptree=p2;

taller=1;

}

}

}

voiddelete2(pnodeq,pnode&r,int&taller)

{

if(r->rchild==NULL)

{

q->data=r->data;

q=r;

r=r->lchild;

deleteq;

taller=1;

}

else

{

delete2(q,r->rchild,taller);

if(taller==1)

right2(r,taller);

}

}

intdelete1(pnode&ptree,charx[10],int&taller)

{

intk;

pnodeq;

if(ptree==NULL)

return0;

elseif(strcmp(x,ptree->data.NO)<0)

{

k=delete1(ptree->lchild,x,taller);

if(taller==1)

left2(ptree,taller);

returnk;

}

elseif(strcmp(x,ptree->data.NO)>0)

{

k=delete1(ptree->rchild,x,taller);

if(taller==1)

right2(ptree,taller);

returnk;

}

else

{

q=ptree;

if(ptree->rchild==NULL)

{

ptree=ptree->lchild;

deleteq;

taller=1;

}

elseif(ptree->lchild==NULL)

{

ptree=ptree->rchild;

deleteq;

taller=1;

}

else

{

delete2(q,q->lchild,taller);

if(taller==1)

left2(q,taller);

ptree=q;

}

return1;

}

}

voidcreate(pnode&ptree,intn)

{

intj;

Elemtypee;

printf("输入学生信息:

姓名,学号,生日,班级,性别\n");

for(inti=0;i

{

scanf("%s%s%s%s%s",e.name,e.NO,e.birt,e.clas,e.sex);

insert(ptree,e,j);

}

}

voiddisplay(pnodeptree)

{

if(ptree)

{

display(ptree->lchild);

printf("%-10s%-10s%-10s%-10s%-10s\n",ptree->data.name,ptree->data.NO,ptree->data.birt,ptree->data.clas,ptree->data.sex);

display(ptree->rchild);

}

}

voidfind(pnodeptree,char*ch)

{

if(ptree)

{

if(strcmp(ptree->data.name,ch)==0)

{

printf("姓名学号生日班级性别\n");

printf("%-10s%-10s%-10s%-10s%-10s\n\n",ptree->data.name,ptree->data.NO,ptree->data.birt,ptree->data.clas,ptree->data.sex);

return;

}

else

{

find(ptree->lchild,ch);

find(ptree->rchild,ch);

}

}

}

voidsave(pnodeptree,FILE*p)

{

if(ptree)

{

save(ptree->lchild,p);

p=fopen("student.txt","a");

fprintf(p,"%s\t%s\t%s\t%s\t%s\n",ptree->data.name,ptree->data.NO,ptree->data.birt,ptree->data.clas,ptree->data.sex);

fclose(p);

save(ptree->rchild,p);

}

}

voidread(pnode&ptree,FILE*p)

{

intj;

charc;

Elemtypee;

if((p=fopen("student.txt","r"))==NULL)

return;

while((c=fgetc(p))!

=EOF)

{

fscanf(p,"%s%s%s%s%s",e.name,e.NO,e.birt,e.clas,e.sex);

insert(ptree,e,j);

}

fclose(p);

}

voidPrint(pnodeptree,intindent)

{

if(ptree==NULL)

return;

for(inti=0;i

printf("|-----");

printf("%-10s%-10s%-10s%-10s%-10s\n",ptree->data.name,ptree->data.NO,ptree->data.birt,ptree->data.clas,ptree->data.sex);

Print(ptree->lchild,indent+1);

Print(ptree->rchild,indent+1);

}

voidchange(pnodeptree,Elemtypee)

{

if(ptree==NULL)

return;

else

{

if(strcmp(ptree->data.NO,e.NO)==0)

{

ptree->data=e;

return;

}

else

{

change(ptree->lchild,e);

change(ptree->rchild,e);

}

}

}

voidmale(pnodeptree)

{

charm[2]={"m"};

if(ptree)

{

male(ptree->lchild);

if(strcmp(ptree->data.sex,m)==0)

printf("%-10s%-10s%-10s%-10s%-10s\n",ptree->data.name,ptree->data.NO,ptree->data.birt,ptree->data.clas,ptree->data.sex);

male(ptree->rchild);

}

}

voidfmale(pnodeptree)

{

charm[2]={"f"};

if(ptree)

{

fmale(ptree->lchild);

if(strcmp(ptree->data.sex,m)==0)

printf("%-10s%-10s%-10s%-10s%-10s\n",ptree->data.name,ptree->data.NO,ptree->data.birt,ptree->data.clas,ptree->data.sex);

fmale(ptree->rchild);

}

}

voidmain()

{

intz;

FILE*p=NULL;

pnodeptree=NULL;

printf("请选择:

\n1------------------载入学生信息\n2------------------重新创建信息\n");

scanf("%d",&z);

if(z==1)

read(ptree,p);

Elemtypee,a;

intt=1;

charch[10],x[10];

intj,k,n;

while(t)

{

printf("********平衡二叉树实现学生基本信息管理********\n");

printf("***********************************************\n\n");

printf("1------------------------------------------创建\n");

printf("2------------------------------------------插入\n");

printf("3------------------------------------------删除\n");

printf("4------------------------------------------修改\n");

printf("5------------------------------------------查找\n");

printf("6------------------------------------------显示\n");

printf("7------------------------------------------排序\n");

printf("8------------------------------------------分组\n");

printf("9------------------------------------------保存\n");

printf("0------------------------------------------退出\n");

printf("输入操作选项(0--9)\n");

scanf("%d",&k);

switch(k)

{

case1:

printf("输入要创建的学生数\n");

scanf("%d",&n);

create(ptree,n);

break;

case2:

printf("输入学生信息:

姓名,学号,生日,班级,性别\n");

scanf("%s%s%s%s%s",e.name,e.NO,e.birt,e.clas,e.sex);

insert(ptree,e,j);

break;

case3:

printf("输入要删除的学生的学号\n");

scanf("%s",x);

delete1(ptree,x,j);

break;

case4:

printf("输入修改后的信息:

姓名,学号,生日,班级,性别\n");

scanf("%s%s%s%s%s",a.name,a.NO,a.birt,a.clas,a.sex);

change(ptree,a);

break;

case5:

printf("输入要查找的学生姓名\n");

scanf("%s",ch);

find(ptree,ch);

printf("\n");

break;

case6:

printf("凹入显示:

\n\n");

Print(ptree,0);

printf("\n");

break;

case7:

printf("按学号排序结果如下:

\n\n");

printf("姓名学号生日班级性别\n");

display(ptree);

printf("\n");

break;

case8:

printf("男生基本信息如下:

\n\n");

male(ptree);

printf("\n");

printf("女生基本信息如下:

\n\n");

fmale(ptree);

printf("\n");

break;

case9:

p=fopen("student.txt","wt");

fprintf(p,"\n");

fclose(p);

save(ptree,p);

printf("学生信息已存入文件\n\n");

break;

case0:

printf("谢谢使用,再见\n");

t=0;

break;

}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1