数据结构的定义(略)
eg1:如何在书架上摆放图书?
1、随便放:好放不好找。
2、按字母放:好找不好放。
3、按类别字母放。
结论:解决问题方法的效率,与数据组织方式有关。
eg2:实现函数PrintN,使得传入一个正整数N后,能顺序打印出从1到N的全部正整数。
方法一:循环打印。
方法二:递归打印。
结论:解决问题方法的效率,与空间利用效率有关。
eg3:计算给定多项式在给定点X处的值。
f(x)=a0+a1*x+...+an-1*x^(n-1)+an*x^n
方法一:循环相加。
方法二:秦九韶算法。
结论:解决问题方法的效率,与算法巧妙程度有关。
#include <stdio.h>
#include <time.h>
#include <math.h>
clock_t start, stop;
double duration;
#define MAXN 100
#define MAXK 1e7
//直接求和
double f1(int n, double a[], double x){
int i;
double p=a[0];//第一项
for(i=1;i<=n;i++){
p += (pow(x,i)/a[i]);//第一项+后一项 作为第一项
}
return p;
}
//秦九韶公式
double f2(int n, double a[], double x){
int i;
double p=1/a[n];//最后一项
for(i=n;i>1;i--){
p=p*x+1/a[i-1]; //最后一项*x+前一项 作为最后一项
}
return p;
}
int main()
{
int i;
//构造数组a
double a[MAXN];
a[0]=1;
for(i=1;i<=MAXN;i++) {
a[i]=(double)i;
}
//f1
start=clock();
for(i=0;i<MAXK;i++){
f1(MAXN,a,1.1);
}
stop=clock();
duration=((double)(stop-start)/CLK_TCK);
printf("ticks1 = %f\n",(double)(stop-start));
printf("duration1 = %6.2e\n",duration);
//f2
start=clock();
for(i=0;i<MAXK;i++){
f2(MAXN,a,1.1);
}
stop=clock();
duration=((double)(stop-start)/CLK_TCK);
printf("ticks2 = %f\n",(double)(stop-start));
printf("duration2 = %6.2e\n",duration);
return 0;
}
描述数据结构的方法:抽象数据类型
eg4:“矩阵”的抽象数据类型的定义
1、数据对象集
2、操作集