简明现代魔法 -> 数据结构 -> 遍历一维数组的效率例子

遍历一维数组的效率例子

2010-07-31

下面的程序,输入学生的成绩查询其学号。首先将输入的数字与数组的各元素匹配,若匹配的话,该数组元素的索引就是该学生的学号。然后就可以将这个数组元素输出。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
	int score[10]={76,85,90,67,59,79,82,95,91,65};
	int num;
	int grade;
	int i;
	 
	num=-1;
	printf("用学生成绩查询学号");
	printf("请输入学生成绩(0到100)。==> ");
	scanf("%d",&grade);
	for(i=0;i<10;i++)
	{
		if(score[i]==grade)
		{
			num=i;
			break;
		}
	}
	if(num != -1)
	{
		printf("学生学号是:%d\n",num);     
	}
	else
	{
		printf("没有此成绩的学生\n");
	}
	
	system("PAUSE");    
	return 0;
}

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

下面使用指针来实现。

#include <stdio.h>
#include <stdlib.h>
	
int main(int argc, char *argv[])
{
	int score[10]={76,85,90,67,59,79,82,95,91,65};
	int pointer[101];
	int index;
	int grade;
	int i;
	
	/*第一部分:创建指针数组*/
	for(i=0; i<=101; i++)
	{
		pointer[i] = -1;       
	}
	for(i=0; i<10; i++)
	{
		index=score[i];
		pointer[index]=i;       
	}
	/*第二部分:查询学生学号*/
	while(1)
	{
		printf("请输入学生成绩(0到100).==>");
		scanf("%d",&grade);
		if(grade != -1)
		{
			index = pointer[grade];
			if(index != -1)
			{
            	printf("学生学号是:%d\n",index);
            }
			else
			{
            	printf("没有此成绩的学生\n");
            }       
		}
		else
		{
        	exit(1);
        }      
	}

	system("PAUSE");    
	return 0;
}

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

随机文章推荐
网站分类


注:如需转载本文,请注明出处(原文链接),谢谢。更多精彩内容,请进入简明现代魔法首页。

进入新博客
喜欢本文,就分享它吧
给我留言
您的名字:
您的邮件:
您的网站:


 

copyright © 2009 简明现代魔法    学习、分享、进步

power by Gonn 感谢所有关心和支持本站的朋友们