#include<stdio.h>
#include<stdlib.h>
typedef struct
{
int key;
float weight;
}elemtype;
typedef struct{
elemtype *elem;
int length;
}sstable;
#define overflow -2
#define max 5
#define false 0
typedef int keytype;
typedef elemtype bitelemtype;
typedef struct bitnode
{
bitelemtype data;
bitnode *lchild;
bitnode *rchild;
}bitnode;
typedef bitnode *bitree;
int eq(int a,int b)
{
if (a==b)return 1;
else return 0;
}
int searchseq(sstable st,keytype key)
{ int i;
st.elem[0].key=key;
for(i=st.length;!eq(st.elem[i].key,key);i--);
return i;
}
int lt(int a,int b)
{
if(a<b) return 0;
else return 1;
}
int searchbin(sstable st,keytype key){
int low,high,mid;
low=1;high=st.length;
while(low<=high)
{
mid=(low+high)/2;
if(eq(key,st.elem[mid].key))return mid;
else if(lt(key,st.elem[mid].key))high=mid-1;
else low=mid+1;
}
return 0;
}
bitree searchbit1(bitree t,keytype key)
{if(!t||eq(key,t->data.key))return(t);
else if (lt(key,t->data.key)) return(searchbit1(t->lchild,key));
else return(searchbit1(t->rchild,key));
}
int create(sstable &t,int n)
{
int i,a;
float b;
t.elem=(elemtype*)malloc((n+1)*sizeof(elemtype));
if(!(t.elem))
exit(overflow);
for(t.length=0,i=1;i<=n;i++)
{
scanf("%d,%f",&a,&b);
t.elem[i].key=a;
t.elem[i].weight=b;
t.length++;
}
}
int searchbit2(bitree bst,keytype key,bitree f,bitree p)
{
if(!bst)
{
p=f;
return false;
}
else if(eq(key,bst->data.key))
{
p=bst;
return true;
}
else if(lt(key,bst->data.key))
return searchbit2(bst->lchild,key,bst,p);
else return searchbit2(bst->rchild,key,bst,p);
}
int insertbit(bitree &bst,elemtype e)
{
bitree p,s;
if(!searchbit2(bst,e.key,NULL,p))
{
s=(bitree)malloc(sizeof(bitnode));
s->data=e;
s->lchild=s->rchild=NULL;
if(!p)
bst=s;
else if(lt(e.key,p->data.key))
p->lchild=s;
else p->rchild=s;
return 1;
}
else return false;
};
int createbitree(bitree &bst,sstable t)
{
int i;
bst=NULL;
if(t.length)
{
for(i=1;i<=t.length;i++)
insertbit(bst,t.elem[i]);
}
return 1;
}
int main()
{
sstable t;
bitree bst;
keytype key;
create(t,max);
scanf("%d",&key);
searchseq(t,key);
printf("%d",searchseq(t,key));
searchbin(t,key);
printf("%d",searchbin(t,key));
createbitree(bst,t);
searchbit1(bst,key)==NULL?printf("不 在"):printf("zai");
return 0;
}
参考GPT和自己的思路:
问题在于函数调用searchseq(t,key)和searchbin(t,key)并没有将它们的返回值赋值给任何变量或者打印输出,而是直接跟在函数后面单独调用了printf函数。正确的做法是将它们的返回值赋值给变量,然后再打印输出。例如:
int seq_index = searchseq(t,key);
printf("%d",seq_index);
int bin_index = searchbin(t,key);
printf("%d",bin_index);
这样就可以正确输出查找结果了。