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

数据结构

开发平台:

C/C++

  1. /* ======================================== */
  2. /*    程式实例: 9_5a.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.    int low;                       /* 阵列开始变数       */
  22.    int high;                      /* 阵列结束变数       */
  23.    int mid;                       /* 阵列中间变数       */
  24.    low = 0;                       /* 阵列开始           */
  25.    high = MAX - 1;                /* 阵列结束           */
  26.    while ( low <= high )          /* 二叉搜索主回路     */
  27.    {
  28.       mid = ( low + high ) / 2;   /* 计算阵列中间值     */
  29.       if ( key < data[mid].key )  /* 比较小             */
  30.          high = mid - 1;          /* 前一半             */
  31.       else
  32.          if ( key > data[mid].key )   /* 比较大         */
  33.             low = mid + 1;        /* 后一半             */
  34.          else
  35.             return mid;           /* 找到了             */
  36.    }
  37.    return -1;                     /* 没有找到           */
  38. }
  39. /* ---------------------------------------- */
  40. /*  主程式: 在一个已排序的阵列, 接着输入    */
  41. /*  值用二叉搜索来找值.                     */
  42. /* ---------------------------------------- */
  43. void main()
  44. {
  45.    int found;                     /* 是否找到变数       */
  46.    int value;                     /* 搜索值的内容       */
  47.    while ( 1 )                    /* 主回路开始         */
  48.    {
  49.       printf("n请输入搜索值(0-500) ==> ");
  50.       scanf("%d",&value);         /* 读入搜索值         */
  51.       if ( value != -1 )
  52.       {
  53.          found = binarysearch(value);   /* 呼叫二叉搜索 */
  54.          if ( found != -1 )
  55.             printf("找到搜索值:%d[%d]n",value,found);
  56.          else
  57.             printf("没有找到搜索值:%dn",value);
  58.       }
  59.       else
  60.          exit(1);                 /* 结束程式           */
  61.    }
  62. }