数据结构C语言>数组>一维数组的遍历 空间换取时间

首先看代码1:

 

 1  #include  < stdio.h >
 2  #include  < stdlib.h >
 3 
 4  int  main( int  argc,  char   * argv[])
 5  {
 6     int  score[ 10 ] = { 76 , 85 , 90 , 67 , 59 , 79 , 82 , 95 , 91 , 65 };
 7     int  num;
 8     int  grade;
 9     int  i;
10    
11    num =- 1 ;
12    printf( " 用学生成绩查询学号 " );
13    printf( " 请输入学生成绩(0到100)。==>  " );
14    scanf( " %d " , & grade);
15     for (i = 0 ;i < 10 ;i ++ )
16    {
17       if (score[i] == grade)
18      {
19        num = i;
20         break ;
21      }
22    }
23     if (num  !=-   1 )
24    {
25      printf( " 学生学号是:%d\n " ,num);     
26    }
27     else
28    {
29        printf( " 没有此成绩的学生\n " );
30    }
31    
32    system( " PAUSE " );    
33     return   0 ;
34  }
35 

 

 

很明显,最坏的情况,什么也查不到,但整个数组遍历了。

 

看代码2:

 

 1  #include  < stdio.h >
 2  #include  < stdlib.h >
 3 
 4  int  main( int  argc,  char   * argv[])
 5  {
 6     int  score[ 10 ] = { 76 , 85 , 90 , 67 , 59 , 79 , 82 , 95 , 91 , 65 };
 7     int  pointer[ 101 ];
 8     int  index;
 9     int  grade;
10     int  i;
11    
12     /* 第一部分:创建指针数组 */
13     for (i = 0 ; i <= 101 ; i ++ )
14    {
15      pointer[i]  =   - 1 ;       
16    }
17     for (i = 0 ; i < 10 ; i ++ )
18    {
19      index = score[i];
20      pointer[index] = i;       
21    }
22     /* 第二部分:查询学生学号 */
23     while ( 1 )
24    {
25      printf( " 请输入学生成绩(0到100).==> " );
26      scanf( " %d " , & grade);
27       if (grade  !=   - 1 )
28      {
29        index  =  pointer[grade];
30         if (index  !=   - 1 )
31        {printf( " 学生学号是:%d\n " ,index);}
32         else
33        {printf( " 没有此成绩的学生\n " );}       
34      }
35       else
36      {exit( 1 );}      
37    }
38    
39    
40    system( " PAUSE " );    
41     return   0 ;
42  }
43 

 

除了第一次查询要创建pointer数组外,以后每次查询都可以固定时间内找到。当然,此程序的前提是,每个成绩只出现一次。那么出现多次呢?我也没想好。

你可能感兴趣的:(数据结构)