工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1825|回复: 6

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

[复制链接]
发表于 2007-6-17 19:18 | 显示全部楼层 |阅读模式
我的数据结构设计性实验选的是“动态查找表”。我今天做了这设计性实验,遇到个奇怪的问题,就是无论如何,“插入”一定成功(原本应该是:表中没有这个元素才能插入)。然后在查找时,查找一定不成功。我看我的“插入”和“查找”一定出问题了,但是又检查不出问题在哪里。麻烦各位高手帮我看看,究竟我问题在哪里呢?谢谢!
int  SearchDSTable(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 | 显示全部楼层
大家帮帮我啊!谢谢!
回复

使用道具 举报

发表于 2007-6-17 22:03 | 显示全部楼层
把递归语句后的return去掉...
回复

使用道具 举报

 楼主| 发表于 2007-6-17 23:18 | 显示全部楼层
去掉与不去掉应该没区别吧!
而且我试过了,还是不行.它似乎根本无论如何都搜索不成功的.
回复

使用道具 举报

 楼主| 发表于 2007-6-17 23:18 | 显示全部楼层
插入(原本搜索不成功时才能插入)则永远能插入.
回复

使用道具 举报

发表于 2007-6-17 23:54 | 显示全部楼层
应该是这样,
一种情况是找到,另一种情况是没有找到, 只有这两种情况才会return一个值,
其它的return去掉.
回复

使用道具 举报

发表于 2007-6-18 21:46 | 显示全部楼层
你插入那里错了。因为函数执行的是值传递。你插入之后,只能返回插入成功与不成功的status值,而没有真正执行插入操作。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-8-30 22:40

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表