9_5B.C
上传用户:wyn840322
上传日期:2007-01-13
资源大小:294k
文件大小:3k
源码类别:

数据结构

开发平台:

C/C++

  1. /* ======================================== */
  2. /*    程式实例: 9_5b.c                      */
  3. /*    递回的二叉搜索                        */
  4. /* ======================================== */
  5. #include <stdlib.h>
  6. #define MAX  21                   /* 最大阵列容量       */
  7. struct element                    /* 记录结构宣告       */
  8. {
  9.    int key;                       /* 搜索键值           */
  10. };
  11. typedef struct element record;    /* 结构新型态         */
  12. record data[MAX] = {              /* 结构阵列宣告       */
  13.        2,   5,   7,   9,  17,  21,  25,
  14.       33,  46,  89, 100, 121, 127, 139,
  15.      237, 279, 302, 356, 455, 467, 500  };
  16. /* ---------------------------------------- */
  17. /*  二叉搜索                                */
  18. /* ---------------------------------------- */
  19. int binarysearch(int key)
  20. {
  21.    return binaryfind(key,0,MAX-1);  /* 二叉搜索递回呼叫 */
  22. }
  23. /* ---------------------------------------- */
  24. /*  二叉搜索递回处理                        */
  25. /* ---------------------------------------- */
  26. int binaryfind(int key,int left,int right)
  27. {
  28.    int mid;                       /* 阵列中间变数       */
  29.    if ( left == right )           /* 是否相等           */
  30.       if ( data[left].key == key )
  31.          return left;             /* 找到了             */
  32.       else
  33.          return -1;               /* 没有找到           */
  34.    else
  35.    {
  36.       mid = ( left + right ) / 2; /* 计算阵列中间值     */
  37.       if ( mid == left )          /* 是否相等           */
  38.          mid ++;
  39.       if ( key < data[mid].key )  /* 比较小             */
  40.          /* 左半部递回呼叫二叉搜索 */
  41.          return binaryfind(key,left,mid-1);
  42.       else
  43.          /* 右半部递回呼叫二叉搜索 */
  44.          return binaryfind(key,mid,right);
  45.    }
  46. }
  47. /* ---------------------------------------- */
  48. /*  主程式: 在一个已排序的阵列, 接着输入    */
  49. /*  值用二叉搜索来找值.                     */
  50. /* ---------------------------------------- */
  51. void main()
  52. {
  53.    int found;                     /* 是否找到变数       */
  54.    int value;                     /* 搜索值的内容       */
  55.    while ( 1 )                    /* 主回路开始         */
  56.    {
  57.       printf("n请输入搜索值(0-500) ==> ");
  58.       scanf("%d",&value);         /* 读入搜索值         */
  59.       if ( value != -1 )
  60.       {
  61.          found = binarysearch(value);   /* 呼叫二叉搜索 */
  62.          if ( found != -1 )
  63.             printf("找到搜索值:%d[%d]n",value,found);
  64.          else
  65.             printf("没有找到搜索值:%dn",value);
  66.       }
  67.       else
  68.          exit(1);                 /* 结束程式           */
  69.    }
  70. }