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

数据结构

开发平台:

C/C++

  1. /* ======================================== */
  2. /*    程式实例: 9_4b.c                      */
  3. /*    线性搜索(一个更快的技巧)              */
  4. /* ======================================== */
  5. #include <stdlib.h>
  6. #include <time.h>
  7. #define MAX  100                  /* 最大阵列容量     */
  8. struct element                    /* 记录结构宣告     */
  9. {
  10.    int key;                       /* 搜索键值         */
  11. };
  12. typedef struct element record;    /* 结构新型态       */
  13. record data[MAX+1];               /* 结构阵列宣告     */
  14. /* ---------------------------------------- */
  15. /*  线性搜索                                */
  16. /* ---------------------------------------- */
  17. int seq_search(int key)
  18. {
  19.    int pos;                       /* 阵列索引         */
  20.    data[MAX].key = key;           /* 将值存入最后     */
  21.    pos = 0;                       /* 从头开始找       */
  22.    while ( 1 )                    /* 线性搜索主回路   */
  23.    {
  24.       if ( key == data[pos].key ) /* 是否找到         */
  25.          break;
  26.       pos ++;                     /* 下一个元素       */
  27.    }
  28.    if ( pos == MAX )              /* 在最后           */
  29.       return -1;
  30.    else
  31.       return pos;
  32. }
  33. /* ---------------------------------------- */
  34. /*  主程式: 用乱数来产生阵列元素, 接着输入  */
  35. /*  值用线性搜索来找值.                     */
  36. /* ---------------------------------------- */
  37. void main()
  38. {
  39.    int checked[300];              /* 检查阵列         */
  40.    int i,temp;
  41.    long temptime;
  42.    srand(time(&temptime) % 60);   /* 使用时间初始乱数 */
  43.    for ( i = 0; i < 300; i++ )
  44.       checked[i] = 0;             /* 清除检查阵列     */
  45.    i = 0;
  46.    while ( i != MAX )             /* 产生阵列值的回路 */
  47.    {
  48.       temp = rand() % 300;        /* 乱数取值 0-299   */
  49.       if ( checked[temp] == 0 )   /* 是否是已有的值   */
  50.       {
  51.          data[i].key = temp;      /* 存入阵列中       */
  52.          checked[temp] = 1;       /* 设定此值产生过   */
  53.          i++;                     /* 下一个阵列值     */
  54.       }
  55.    }
  56.    while ( 1 )                    /* 主回路开始       */
  57.    {
  58.       printf("n请输入搜索值(0-299) ==> ");
  59.       scanf("%d",&temp);          /* 读入搜索值       */
  60.       if ( temp != -1 )
  61.       {
  62.          i = seq_search(temp);    /* 呼叫线性搜索     */
  63.          if ( i != -1 )
  64.             printf("找到搜索值:%d[%d]n",temp,i);
  65.          else
  66.             printf("没有找到搜索值:%dn",temp);
  67.       }
  68.       else
  69.          exit(1);                 /* 结束程式         */
  70.    }
  71. }