基于二叉排序树的商品信息查询算法的设计与实现.docx

上传人:b****6 文档编号:7258530 上传时间:2023-01-22 格式:DOCX 页数:23 大小:111.91KB
下载 相关 举报
基于二叉排序树的商品信息查询算法的设计与实现.docx_第1页
第1页 / 共23页
基于二叉排序树的商品信息查询算法的设计与实现.docx_第2页
第2页 / 共23页
基于二叉排序树的商品信息查询算法的设计与实现.docx_第3页
第3页 / 共23页
基于二叉排序树的商品信息查询算法的设计与实现.docx_第4页
第4页 / 共23页
基于二叉排序树的商品信息查询算法的设计与实现.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

基于二叉排序树的商品信息查询算法的设计与实现.docx

《基于二叉排序树的商品信息查询算法的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于二叉排序树的商品信息查询算法的设计与实现.docx(23页珍藏版)》请在冰豆网上搜索。

基于二叉排序树的商品信息查询算法的设计与实现.docx

基于二叉排序树的商品信息查询算法的设计与实现

河北工业大学

《数据结构》课程实验

 

实验报告

 

题目:

基于二叉排序树的商品信息查询算法的设计与实现

专业:

计算机科学与技术

班级:

姓名:

学号:

完成日期:

 

一、试验内容

查找是数据处理的重要操作。

请设计并实现基于二叉排序树的商品信息查询算法。

完成信息的查询、插入、删除、查询频度的统计等功能。

二、试验目的

熟练掌握顺序查找、折半查找及二叉排序树、平衡二叉树上的查找、插入和删除的方法。

三、流程图

四、源程序代码

#include

#include

#include

#include

usingnamespacestd;

structshangpin

{

intcishu,pingheng,jiage;

charmingcheng[40];

shangpin*l,*r,*p;

intshendu,quan;

};

intmax(inta,intb)

{

if(a>b)return(a);

elsereturn(b);

};

shangpin*charu(shangpin*p)

{

shangpin*p1,*l,*r;

chara[40];

intb=0;

cout<<"请输入商品名称:

"<

cin>>a;

err:

b=strcmp(a,p->mingcheng);

if(b==0){

cout<<"此商品已有。

"<

return(NULL);

}

elseif(b==-1){

if(p->l==NULL){

p->l=newshangpin;

p1=p->l;

strcpy(p1->mingcheng,a);

p1->cishu=0;

p1->l=NULL;

p1->r=NULL;

p1->p=p;

p1->pingheng=0;

cout<<"请输入此商品的价格:

"<

cin>>p1->jiage;

return(p->l);

}

else{l=p->l;p=l;gotoerr;};

}

else{

if(p->r==NULL){

p->r=newshangpin;

p1=p->r;

strcpy(p1->mingcheng,a);

p1->cishu=0;

p1->r=NULL;

p1->l=NULL;

p1->p=p;

p1->pingheng=0;

cout<<"请输入此商品的价格:

"<

cin>>p1->jiage;

return(p->r);

}

else{r=p->r;p=r;gotoerr;};

};

};

voidchushi(shangpin*p)

{

cout<<"建立初始节点:

"<

"<

cin>>p->mingcheng;

cout<<"请输入此商品价格:

"<

cin>>p->jiage;

cout<<"请输入访问次数:

"<

cin>>p->cishu;

p->l=NULL;

p->r=NULL;

p->p=NULL;

p->pingheng=0;

};

intchaxun(shangpin*p,chara[])

{

intb;

err3:

b=strcmp(a,p->mingcheng);

if(b==0){

cout<<"查找成功,输出有关信息:

"<

p->cishu=p->cishu+1;

cout<<"此商品价格为:

"<jiage<

return

(1);

}

elseif(b==-1){

p=p->l;

if(p==NULL){

cout<<"没有此商品,查找失败!

"<

return(0);

}

elsegotoerr3;

}

else{

p=p->r;

if(p==NULL){

cout<<"没有此商品,查找失败!

"<

return(0);

}

elsegotoerr3;

}

};

intshanchu(shangpin*p)

{

shangpin*p1;

chara[40];

intb;

cout<<"请输入要删除的商品的名称:

"<

cin>>a;

err2:

b=strcmp(a,p->mingcheng);

if(b==0){

p1=p->p;

if(p1->l==p){

if(p->l==NULL&&p->r==NULL){

p1->l=NULL;

}

elseif(p->l==NULL){

p1->l=p->r;

}

elseif(p->r==NULL){

p1->l=p->l;

}

else{

p1->l=p->l;

p1=p->r;

while(p1->r!

=NULL){

p1=p1->r;

};

p1->r=p->r;

};

}

else{

if(p->l==NULL&&p->r==NULL){

p1->r=NULL;

}

elseif(p->l==NULL){

p1->r=p->r;

}

else{

p1->r=p->l;

p1=p->r;

while(p1->r!

=NULL){

p1=p1->r;

};

p1->r=p->r;

};

};

cout<<"删除成功。

"<

return

(1);

}

elseif(b==-1){

p=p->l;

if(p==NULL){

cout<<"没有此商品,删除失败!

"<

return(0);

}

elsegotoerr2;

}

else{

p=p->r;

if(p==NULL){

cout<<"没有此商品,删除失败!

"<

return(0);

}

elsegotoerr2;

};

};

intbianlishendu(shangpin*p3)

{

inta=0;

shangpin*p1,*l,*r,*p;p=p3;

if(p->l==NULL&&p->r==NULL){

cout<<"只有一头节点"<

return(0);

};

err7:

if(a==0){

if(p->l==NULL){a=1;}

else{p1=p;p=p->l;a=0;gotoerr7;};

};

if(a==1){

if(p->r==NULL){a=2;}

else{p1=p;p=p->r;a=0;gotoerr7;};

};

if(a==2){

p1=p;p=p->p;

if(p->l==p1)a=1;

if(p->r==p1)a=2;

if(p1->l==NULL&&p1->r==NULL){p1->shendu=0;}

elseif(p1->l==NULL){r=p1->r;p1->shendu=r->shendu+1;}

elseif(p1->r==NULL){l=p1->l;p1->shendu=l->shendu+1;}

else{r=p1->r;l=p1->l;p1->shendu=max(l->shendu,r->shendu)+1;}

};

if(p3->r==p1&&a==2){

l=p3->l;

r=p3->r;

if(l!

=NULL)p3->shendu=max(l->shendu,r->shendu)+1;

elsep3->shendu=r->shendu+1;

}

elseif(p3->r==NULL&&p3->l==p1){

if(p3==p){p3->shendu=p1->shendu+1;}

elsegotoerr7;

}

elsegotoerr7;

return(0);

};

shangpin*pinghenghua(shangpin*p0)

{

shangpin*p2,*p3,*p4,*p5,*p6,*p7,*p8;

inti,j,a,yong;

a=0;

shangpin*pq[40],*p1,*l,*r,*p;

err10:

p=p0;

if(p->l==NULL&&p->r==NULL){

cout<<"这里只有一个节点"<

return(p0);

};

for(i=0;i<40;i++){

pq[i]=NULL;

};

a=0;

yong=bianlishendu(p0);

for(i=0;i<40;i++){

for(j=0;j

if(pq[j]==p)break;

};

if(j==i){pq[i]=p;}

elsei=i-1;

if(a==0){

if(p->l==NULL){a=1;}

else{p1=p;p=p->l;a=0;continue;};

};

if(a==1){

if(p->r==NULL){a=2;}

else{p1=p;p=p->r;a=0;continue;};

};

if(a==2){

p1=p;p=p1->p;

if(p->l==p1){a=1;};

if(p->r==p1){a=2;};

if(p1->l==NULL&&p1->r==NULL){p1->quan=0;}

elseif(p1->l==NULL){r=p1->r;p1->quan=-r->shendu-1;}

elseif(p1->r==NULL){l=p1->l;p1->quan=l->shendu+1;}

else{r=p1->r;l=p1->l;p1->quan=l->shendu-r->shendu;}

};

if(p0->r==p1&&a==2){

l=p0->l;

r=p0->r;

if(l!

=NULL)p0->quan=l->shendu-r->shendu;

elsep0->quan=-r->shendu;

gotoerr8;

}

elseif(p0->l==p1&&p0->r==NULL){

if(p0==p){p0->quan=p1->shendu+1;gotoerr8;}

else{;};

}

else{;};

};

err8:

a=i;

for(i=0;i<=a;i++){

if(pq[i]->quan==2){

p2=pq[i]->l;

if(p2->quan==1){

if(p2!

=NULL){p3=p2->l;p4=p2->r;};

p5=pq[i]->r;

p6=pq[i]->p;

if(p6==NULL){p2->p=NULL;}

elseif(p6->l==pq[i]){p6->l=p2;p2->p=p6;}

else{p6->r=p2;p2->p=p6;};

pq[i]->l=p4;if(p4!

=NULL)p4->p=pq[i];

pq[i]->r=p5;if(p5!

=NULL)p5->p=pq[i];

pq[i]->p=p2;if(p2!

=NULL)p2->r=pq[i];

if(p2!

=NULL)p2->l=p3;if(p3!

=NULL)p3->p=p2;

pq[i]->quan=0;

pq[i]->shendu=pq[i]->shendu-2;

if(p2!

=NULL)p2->quan=0;

p=p0;

while(p->p!

=NULL){

p=p->p;

};

yong=bianlishendu(p);

break;

};

if(p2->quan==-1){

if(p2!

=NULL)p3=p2->r;

p4=pq[i]->p;

if(p2!

=NULL)p5=p2->l;

if(p3!

=NULL)p6=p3->l;

if(p3!

=NULL)p7=p3->r;

p8=pq[i]->r;

if(p4==NULL){p3->p=NULL;}

elseif(p4->l==pq[i]){p4->l=p3;p3->p=p4;}

else{p4->r=p3;p3->p=p4;};

if(p3!

=NULL)p3->l=p2;if(p2!

=NULL)p2->p=p3;

if(p3!

=NULL)p3->r=pq[i];pq[i]->p=p3;

if(p2!

=NULL)p2->r=p6;if(p6!

=NULL)p6->p=p2;

pq[i]->l=p7;if(p7!

=NULL)p7->p=pq[i];

pq[i]->r=p8;if(p8!

=NULL)p8->p=pq[i];

pq[i]->quan=-1;

if(p2!

=NULL)p2->quan=0;

if(p3!

=NULL)p3->quan=0;

if(p8!

=NULL)pq[i]->shendu=p8->shendu+1;

if(p2!

=NULL)p2->shendu=p2->shendu-1;

if(p2!

=NULL&&p3!

=NULL)p3->shendu=p2->shendu+1;

while(p->p!

=NULL){

p=p->p;

};

yong=bianlishendu(p);

break;

};

};

if(pq[i]->quan==-2){

p2=pq[i]->r;

if(p2->quan==-1){

if(p4!

=NULL){p3=p2->l;p4=p2->r;};

p5=pq[i]->l;

p6=pq[i]->p;

if(p6==NULL){p2->p=NULL;}

elseif(p6->l==pq[i]){p6->l=p2;p2->p=p6;}

else{p6->r=p2;p2->p=p6;};

pq[i]->l=p5;if(p5!

=NULL)p5->p=pq[i];

pq[i]->r=p3;if(p3!

=NULL)p3->p=pq[i];

pq[i]->p=p2;if(p2!

=NULL)p2->l=pq[i];

pq[i]->quan=0;

pq[i]->shendu=pq[i]->shendu-2;

if(p2!

=NULL)p2->quan=0;

while(p->p!

=NULL){

p=p->p;

};

yong=bianlishendu(p);

break;

};

if(p2->quan==1){

if(p2!

=NULL){p3=p2->l;p5=p2->r;};

p4=pq[i]->p;

if(p4!

=NULL){p6=p3->r;p7=p3->l;};

p8=pq[i]->r;

if(p4==NULL){p3->p=NULL;}

elseif(p4->l==pq[i]){p4->l=p3;p3->p=p4;}

else{p4->r=p3;p3->p=p4;};

if(p3!

=NULL)p3->r=p2;if(p2!

=NULL)p2->p=p3;

if(p3!

=NULL)p3->l=pq[i];pq[i]->p=p3;

if(p2!

=NULL)p2->l=p6;if(p6!

=NULL)p6->p=p2;

pq[i]->l=p8;if(p8!

=NULL)p8->p=pq[i];

pq[i]->r=p7;if(p7!

=NULL)p7->p=pq[i];

pq[i]->quan=0;

if(p2!

=NULL)p2->quan=-1;

if(p3!

=NULL)p3->quan=0;

if(p8!

=NULL)pq[i]->shendu=p8->shendu+1;

if(p2!

=NULL)p2->shendu=p2->shendu-1;

if(p3!

=NULL&&p2!

=NULL)p3->shendu=p2->shendu+1;

while(p->p!

=NULL){

p=p->p;

};

yong=bianlishendu(p);

break;

};

};

};

for(i=0;i<=a;i++){

if(pq[i]->quan>=-1&&pq[i]->quan<=1)continue;

elsebreak;

};

if(i==a+1);

else{gotoerr10;};

return(p);

};

voidnull(shangpin*p1)

{

shangpin*p;

p=p1;

p->p=NULL;

p->l=NULL;

p->r=NULL;

};

voidmain()

{

chara,b,mingcheng[40],*p1;

intc,d=0,i,yong;

shangpinhead,meiyou[40];

shangpin*p,*t;p=&head;

err7:

p1=&mingcheng[0];cout<<"初始化输入A,插入输入B,查询输入C,删除输入D,了解客户需要的新商品输入E,结束输入F."<

cin>>a;

if(a=='A'){

cout<<"进入初始化程序:

"<

chushi(p);

cout<<"已生成一个头节点,是否继续插入节点Y/N"<

cin>>b;

if(b=='Y'){

err6:

t=charu(p);

cout<<"请输入访问次数:

"<

cin>>t->cishu;

};

p=pinghenghua(p);

cout<<"是否继续Y/N"<

cin>>b;

if(b=='Y'){

gotoerr6;

}

else{

cout<<"初始化结束。

"<

};

};

if(a=='C'){

cout<<"进入查询程序:

"<

"<

chara[40];

cin>>a;

c=chaxun(p,a);

if(c==0){

for(i=0;i

yong=strcmp(meiyou[i].mingcheng,a);

if(yong==0){

meiyou[i].cishu=meiyou[i].cishu+1;

break;

};

};

if(i==d){

strcpy(meiyou[i].mingcheng,a);

meiyou[i].cishu=1;d=d+1;

};

};

cout<<"*************************"<

};

if(a=='D'){

cout<<"进入删除程序:

"<

c=shanchu(p);

cout<<"*************************"<

p=pinghenghua(p);

};

if(a=='E'){

for(i=0;i

cout<<"商品名称为:

"<

};

cout<<"*************************"<

};

if(a=='B'){

cout<<"进入插入程序:

"<

t=charu(p);

cout<<"*************************"<

p=pinghenghua(p);

};

if(a=='F'){;}

elsegotoerr7;

}

五、调试过程

应该划分模块,对不同的操作应用不同的函数来完成。

在调试过程中,关于平衡二叉树的那部分比较难,没能实现文件的储存和读取功能。

六、结果分析

初始化输入A,插入输入B,查询输入C,删除输入D,了解客户需要的新商品输入E,结束输

入F.

#######################################

A

进入初始化程序:

*************************

建立初始节点:

请输入要查询的商品的名称:

a

请输入此商品价格:

1

请输入访问次数:

1

已生成一个头节点,是否继续插入节点Y/N

Y

请输入要查询的商品的名称:

b

请输入此商品的价格:

2

请输入访问次数:

2

是否继续Y/N

Y

请输入要查询的商品的名称:

c

请输入此商品的价格:

3

请输入访问次数:

3

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

当前位置:首页 > 成人教育 > 专升本

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

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