数据结构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 #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
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数组外,以后每次查询都可以固定时间内找到。当然,此程序的前提是,每个成绩只出现一次。那么出现多次呢?我也没想好。
合乎自然而生生不息。。。