小叶子 发表于 2007-6-17 19:18

做设计性实验时遇到的奇怪问题

我的数据结构设计性实验选的是“动态查找表”。我今天做了这设计性实验,遇到个奇怪的问题,就是无论如何,“插入”一定成功(原本应该是:表中没有这个元素才能插入)。然后在查找时,查找一定不成功。我看我的“插入”和“查找”一定出问题了,但是又检查不出问题在哪里。麻烦各位高手帮我看看,究竟我问题在哪里呢?谢谢!
intSearchDSTable(BiTree *DT,int key)/*在根结点指针为DT的二叉排序树里查找关键字为key的结点。若找到,则返回key的值,否则返回0*/
{
    int status;
    if(!DT) {status=0;return status;}//空树返回0(即查找失败)
    if(DT->key==key){status=key;return status;}//根结点即找到,查找成功,返回key值
    if(DT->key>key){status=SearchDSTable(DT->lchild,key);return status;}//根结点关键字比key大,则在左子树找
    if(DT->key<key){status=SearchDSTable(DT->rchild,key);return status;}//根结点关键字比key小,则在右子树找
    return status;
}
int InsertDSTable(BiTree *DT,int key)/*若二叉排序树里没有关键字为key的结点,则在二叉排序树里插入一结点,使它关键字为key,并返回1;若二叉排序树里已有关键字为key的结点,则返回0*/
{ int status;
   if(!DT)
{ DT=(struct BiTree*)malloc(sizeof(struct BiTree));
    DT->key=key;
    DT->lchild=NULL;
    DT->rchild=NULL;
    status=1;return status;}//空子树的情况
    if(DT->key==key)
    { status=0;return status;}
    if(DT->key>key)
    {status=InsertDSTable(DT->lchild,key);return status;}
    if(DT->key<key)
{ status=InsertDSTable(DT->rchild,key);return status;}
   return status;
}

我的那个“动态查找表”是储存在一棵二叉排序树里。二叉树的结点类型定义为:
struct BiTree
{ int key;
BiTree *lchild,*rchild;
};

小叶子 发表于 2007-6-17 19:19

大家帮帮我啊!谢谢!

hjack 发表于 2007-6-17 22:03

把递归语句后的return去掉...

小叶子 发表于 2007-6-17 23:18

去掉与不去掉应该没区别吧!
而且我试过了,还是不行.它似乎根本无论如何都搜索不成功的.

小叶子 发表于 2007-6-17 23:18

插入(原本搜索不成功时才能插入)则永远能插入.

hjack 发表于 2007-6-17 23:54

应该是这样,
一种情况是找到,另一种情况是没有找到, 只有这两种情况才会return一个值,
其它的return去掉.

本是拉登 发表于 2007-6-18 21:46

你插入那里错了。因为函数执行的是值传递。你插入之后,只能返回插入成功与不成功的status值,而没有真正执行插入操作。
页: [1]
查看完整版本: 做设计性实验时遇到的奇怪问题