📄 btree12.c
字号:
{
r=q->nptr[j-1]; /*把双亲中的信息及待删结点的相关信息移入左树中*/
r->keynum++;
r->key[r->keynum]=q->key[j];
r->eptr[r->keynum]=q->eptr[j];
q->keynum--;
move=j;
while(move<=q->keynum)
{
q->key[move]=q->key[move+1];
q->eptr[move]=q->eptr[move+1];
q->nptr[move]=q->nptr[move+1];
move++;
}
q->key[move]=0;
q->eptr[move]=NULL;
q->nptr[move]=NULL;
r->nptr[r->keynum]=p->nptr[0];
if(p->nptr[0]!=NULL)
p->nptr[0]->parent=r;
free(p);
}
else if((j+1)>=0)/*右树并*/
{
r=q->nptr[j+1];
r->keynum++;
move=r->keynum;
while(move>1)/*调整右节点*/
{
r->key[move]=r->key[move-1]; /*把双亲中的信息及待删结点的相关信息移入右树中*/
r->eptr[move]=r->eptr[move-1];
r->nptr[move]=r->nptr[move-1];
r->nptr[move-1]=r->nptr[move-2];
move--;
}
r->key[1]=q->key[j+1];
r->eptr[1]=q->eptr[j+1];
r->nptr[0]=p->nptr[p->keynum+1];
if(p->nptr[p->keynum+1]!=NULL)
p->nptr[p->keynum+1]->parent=r;
q->keynum--;
move=j+1;/*调整爸爸结点*/
while(move<=q->keynum)
{
q->key[move]=q->key[move+1];
q->eptr[move]=q->eptr[move+1];
q->nptr[move-1]=q->nptr[move];
q->nptr[move]=q->nptr[move+1];
move++;
}
q->key[move]=0;
q->eptr[move]=NULL;
}
if(q->keynum<min)
{
if(q->parent==NULL)
{T=r;
r->parent=NULL;
}
p=q;
q=q->parent;
}
else break;
if(q==NULL)break;
}
}
return 1;
}
display(NodeType *tt)/*层次遍历显示树*/
{
NodeType *p1,*p2;
int i=0,j,d=1,dd,c1=0,c2=0;
int c[100];
pq->front=pq->rear=0;
printf("(");
for(j=1;j<=tt->keynum;j++)
printf("%d ",tt->key[j]);
printf(")");
printf("\n");
pq->items[pq->rear]=tt;
pq->rear=(pq->rear+1)%MAXSIZE;c[0]=1;
while(pq->rear!=pq->front)/*队列非空*/
{
p1=pq->items[pq->front];
pq->front=(pq->front+1)%MAXSIZE;c2++;
while(p1->nptr[i]!=NULL)
{
p2=p1->nptr[i];
printf("(");
for(j=1;j<=p2->keynum;j++)
printf("%d ",p2->key[j]);
printf(")");
pq->items[pq->rear]=p2;
pq->rear=(pq->rear+1)%MAXSIZE;
i++;c1++;
}
c[d]=c1;dd=d;d++;
i=0;
if(c[d-2]==c2)printf("\n");c1=c2=0;
}
printf("\n");
return;
}
menu1()
{
printf("\n\n\n\n");
printf(" welcome to our library!\n");
printf(" 1.add books.\n");
printf(" 2.delete books.\n");
printf(" 3.borrow books.\n");
printf(" 4.give back books.\n");
printf(" 5.display the B-tree.\n");
printf(" 6.exit.\n");
printf(" please input your choice:");
}
add()/*入库*/
{
int a,b;
pq=(queue *)malloc(sizeof(queue));
while(1){
printf("\n\tinput 0 means to stop!\n");
printf("\tplease input the book id:");
scanf("%d",&a);
if(0==a)break;
fflag=1;
t=(BookType *)malloc(sizeof(BookType));
t->booknum=a;
t->sum=0;t->left=0;/*总量先设为0*/
printf("\n\tbook name:");
scanf("%s",t->name);
printf("\n\tbook writer:");
scanf("%s",t->writer);
b=InsertBtree(T,t);
}
return;
}
sub()/*清库*/
{
int a,i;
int flag;/*标记删除是否成功*/
NodeType *p1,*p2;
result re;
printf("\tbegin to delete:(0 means stop inputing!)\n");
while(1){/*开始删除*/
scanf("%d",&a);
if(0==a)break;
re=SearchBtree(T,a);/*查找所删除的号码*/
if(!re.tag)printf("\tcann't find%d\n",a);
else
{
if(re.pt->nptr[0]==NULL)/*删除的为最底层结点*/
{flag=delete1(re.pt,re.i);
printf("\tdelete successfully!\n");
printf("\n\tnew btree:\n");showbtree(T);}
else/*删除的不是最底层结点*/
{
p1=re.pt;
i=re.i;
do{
p2=p1;
p1=p1->nptr[i];
i=0;
}while(p1!=NULL);/*p2为找到的结点位置*/
p1=re.pt;
i=re.i;
p1->key[i]=p2->key[1];
flag=delete1(p2,1);
printf("\tdelete successfully!\n");
printf("\n\tnew btree:\n");showbtree(T);
}
}
printf("\tcoutinue to detlte(0 means to stop)\n");
}
return;
}
borrow1() /*借书*/
{
int a;
int cou=1;/*标记借书证*/
result re;
struct date d;
getdate(&d);
while(1){
printf("\tthe id of the book:");
scanf("%d",&a);
if(a==0)break;
fflag=2;/* 标记借书*/
re=SearchBtree(T,a);
if(re.tag){
if(re.pt->eptr[re.i]->left>0)
{
printf("\tplease input your card number:");
scanf("%d",&(re.pt->eptr[re.i]->borrow[cou]));
/*re.pt->eptr[re.i]->data[cou]="05.4.6";*/
system("cls");
printf("\tyour personal information:\n\n");
printf("\tyour reading card:");
printf("%d\n",re.pt->eptr[re.i]->borrow[cou]);
printf("\tyou have borrowed book %d\n",a);
printf("\tbook name:");
printf("%s\n",re.pt->eptr[re.i]->name);
printf("\tbook writer:");
printf("%s\n",re.pt->eptr[re.i]->writer);
printf("\tyou must return the book before:%d,%d,%d",d.da_year,d.da_mon+1,d.da_day);
re.pt->eptr[re.i]->date[cou][0]=d.da_year;
re.pt->eptr[re.i]->date[cou][1]=d.da_mon;
re.pt->eptr[re.i]->date[cou][2]=d.da_day;
cou++;
printf("\n\tcontinue to input!\n");
}
else
printf("\tthe book has been borrowed!\n");
}
else
printf("\tsorry,we don't have this book!\n");
}
return;
}
back() /*还书*/
{
int a,j=1;
result re;
while(1){
printf("\tback:\n");
printf("\tbook id:");
scanf("%d",&a);
if(a==0)break;
fflag=3;/* 标记借书*/
re=SearchBtree(T,a);
if(re.tag){
printf("\tbook name:");
printf("%s\n",re.pt->eptr[re.i]->name);
printf("\tbook writer:");
printf("%s\n",re.pt->eptr[re.i]->writer);
printf("\tplease input your card number:");
scanf("%d",&a);
while(a!=re.pt->eptr[re.i]->borrow[j])j++;
re.pt->eptr[re.i]->borrow[j]=0;
re.pt->eptr[re.i]->date[j][0]=0;
re.pt->eptr[re.i]->date[j][1]=0;
re.pt->eptr[re.i]->date[j][2]=0;
}
else printf("\n\tyour have return the wrong book!\n");
}
return;
}
menu2()
{ printf("\n\n\n\n\n\n\n");
printf(" *************************************************\n");
printf(" the library system \n\n");
printf(" made by:Liang Xiaoqiu\n");
printf(" class:Computer 3\n");
printf(" number: 2003374315\n");
printf(" guided by: Miss Sun\n");
printf(" **************************************************\n");
printf(" press any key to continue!");
}
main()
{
int mm;
menu2();
getch();
system("cls");
menu1();
while(1)
{
scanf("%d",&mm);system("cls");
switch(mm)
{
case 1:add();
printf("press any key to continue!\n");
getch();
system("cls");menu1();
break;
case 2:sub();
printf("press any key to continue!\n");
getch();
system("cls");menu1();
break;
case 3:borrow1();
printf("press any key to continue!\n");
getch();
system("cls");menu1();
break;
case 4:back();
printf("press any key to continue!\n");
getch();
system("cls");menu1();
break;
case 5: showbtree(T);/*display(T);*/
printf("press any key to contiune!\n");
getch();
system("cls");menu1();
break;
case 6:exit(0);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -