데이터 구조 설정 - 찾기, 정렬, 파일 - 이 진 트 리 와 파일 작업
58624 단어 필기 하 다.
#include
#define FN "D:\\BST.txt"
//
using namespace std;
typedef struct student
{
char num[6]; //
int grade; //
} ElemType;
typedef struct BTnode
{
ElemType data;
BTnode *lchild,*rchild;
} BTnode,*BTtree;
ElemType a[105];
BTtree creatBTtree()
{
BTtree bt=NULL;
return bt;
}
int nodenum(BTtree T)//
{
int sum=0;
if(!T)
{
return 0;
}
else
{
sum=1+nodenum(T->lchild)+nodenum(T->rchild);
}
return sum;
}
int leafnodenum(BTtree T)//
{
int sum=0;
if(!T)
{
return 0;
}
else if((T->lchild==NULL)&&(T->rchild==NULL))
{
return 1;
}
else
{
return leafnodenum(T->lchild)+leafnodenum(T->rchild);
}
return sum;
}
void InOrderTraverseBTtree(BTtree T)//
{
if(T)
{
InOrderTraverseBTtree(T->lchild);
printf(" :%s :%d
",T->data.num,T->data.grade);
InOrderTraverseBTtree(T->rchild);
}
}
int Depth(BTtree T)
{
if(!T)return 0;
else
{
int m=Depth(T->lchild);
int n=Depth(T->rchild);
if(m>n){
return m+1;}
else{
return n+1;}
}
}
int SearchBST(BTtree T,char no[])//
//T ,e ,f T ,p
{
queue<BTtree>q;
q.push(T);
while(!q.empty())
{
BTtree t=q.front();
q.pop();
if (strcmp((t->data.num),no)==0)
{
return t->data.grade;
}
if (t->lchild)
{
q.push(t->lchild);
}
if (t->rchild)
{
q.push(t->rchild);
}
}
return 0;
}
int InsertBST(BTtree &T,char no[],int e)//
{
BTtree s=NULL,p,q=NULL;
s=new BTnode;
strcpy(s->data.num,no);
s->data.grade=e;
s->lchild=s->rchild=NULL;
if(!T)//
{
T=s;
return 1;
}
if(SearchBST(T,no))//
{
return 0;
}
p=T;
while(p)
{
q=p;
if(p->data.grade > e)//
{
p=p->lchild;
}
else//
{
p=p->rchild;
}
}
if(q->data.grade>e)
{
q->lchild=s;
return 1;
}
else
{
q->rchild=s;
return 1;
}
return 0;
}
int Delete(BTtree *p)//
{
BTtree q,s;
if((*p)->rchild==NULL)//
{
q=*p;
*p=(*p)->lchild;//
free(q);
}
else if((*p)->lchild==NULL)//
{
q=*p;
*p=(*p)->rchild;//
free(q);
}
else// ,
{
q=*p;
s=(*p)->lchild;
while(s->rchild)
{
q=s;
s=s->rchild;
}
(*p)->data=s->data;//
if(*p!=q)
{
q->rchild=s->lchild;
}
else
{
q->lchild=s->lchild;
}
free(s);
}
return 1;
}
int DeleteBST(BTtree *T,int e)//
{
if(!*T)
{
return -1;
}
else
{
if((*T)->data.grade==e)
{
return Delete(T);
}
else if(e<(*T)->data.grade)
{
return DeleteBST(&(*T)->lchild,e);
}
else
{
return DeleteBST(&(*T)->rchild,e);
}
}
}
int f_write(BTtree T)
{
FILE *fp;
if((fp=fopen(FN,"w+"))==NULL)
{
printf("fail open!
");
return -1;
}
queue<BTtree>q;
q.push(T);
while(!q.empty())
{
BTtree t=q.front();
q.pop();
fprintf(fp,"%s %d
",t->data.num,t->data.grade);
printf("%s %d
",t->data.num,t->data.grade);
if (t->lchild)
{
q.push(t->lchild);
}
if (t->rchild)
{
q.push(t->rchild);
}
}
cout<<" !"<<endl;
fclose(fp);
return 0;
}
int f_read(BTtree &T)
{
FILE *fp;
if((fp=fopen(FN,"r+"))==NULL)
{
printf("fail open!
");
return -1;
}
int x;
char str[6];
while (!feof(fp))
{
fscanf(fp,"%s %d
",str,&x);
//str[6]='\0';
InsertBST(T,str,x);
}
cout<<" !"<<endl;
fclose(fp);
return 0;
}
void Put(BTtree T)//
{
if(T!=NULL)
{
//cout<
cout<<T->data.num;
if(T->lchild!=NULL||T->rchild!=NULL)
{
cout<<"(";
Put(T->lchild);
if(T->rchild!=NULL)
{
cout<<",";
}
Put(T->rchild);
cout<<")";
}
}
}
/*
:
a: a,
a(b): a, b,
a(,c): a, , c
a(b,c) a, b c
*/
void menu()
{
printf ("
1.
");
printf ("2.
");
printf ("3.
");
printf ("4.
");
printf ("5.
");
printf ("6.
");
printf ("7.
");
printf ("8.
");
printf ("9.
");
printf ("10.
");
}
int main()
{
printf("-------- --------
");
BTtree T;
T=creatBTtree();
int ch;
while (1)
{
menu();
printf(" :
");
cin>>ch;
switch(ch)
{
case 1:
int n;
ElemType x;
printf(" :");
cin>>n;
for(int i=1; i<=n; i++)
{
printf(" :");
cin>>x.num>>x.grade;
InsertBST(T,x.num,x.grade);
}
break;
case 2:
f_write(T);
break;
case 3:
f_read(T);
break;
case 4:
printf("
:
");
InOrderTraverseBTtree(T);
break;
case 5:
printf("
:%d
",Depth(T));
break;
case 6:
printf("
:%d
",nodenum(T));
printf("
:%d
",leafnodenum(T));
break;
case 7:
char s[6];
int score;
printf ("
");
cin>>s;
if(SearchBST(T,s))
{
printf(" , !
");
break;
}
printf ("
");
cin>>score;
InsertBST(T,s,score);
printf ("
");
InOrderTraverseBTtree(T);
break;
case 8:
printf ("
");
char Del[6];
cin>>Del;
if(!SearchBST(T,Del))
{
printf(" , !
");
}
else
{
DeleteBST(&T,SearchBST(T,Del));
printf ("
");
InOrderTraverseBTtree(T);
}
break;
case 9:
printf ("
");
char no[6];
cin>>no;
if(SearchBST(T,no))
{
printf (" %s :%d
",no,SearchBST(T,no));
}
else
{
printf("
");
}
break;
case 10:
printf("
:");
Put(T);
break;
default:
printf(" ,
");
break;
}
}
return 0;
}
/*
5
1901 98
1902 100
1903 87
1904 95
1905 65
*/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Dubbo (2): zookeeper 등록 센터Zookeeper 는 Apacahe Hadoop 의 하위 프로젝트 로 트 리 형태의 디 렉 터 리 서비스 로 푸 시 변경 을 지원 하 며 Dubbo 서비스의 등록 센터 로 적합 하 며 산업 강도 가 높 아 생산 환경...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.