您的位置:首页 > 理论基础 > 数据结构算法

浙江大学数据结构第一讲:1.1什么是数据结构

2020-03-05 17:22 519 查看

第一讲:基本概念

1.1:什么是数据结构?
1.1.1: 图书摆放问题:
讨论:对中等规模、大规模的图书摆放,你有什么更好的建议 ?
一、把图书分类:把书分为科技类、艺术类、杂志等等种类;
二、每一类对应着一个字符或者汉字索引;
三、利用计算机建立索引目录,对所有的书按类别,按时间出版时间、按按类别等方式进行编号;
四、动态扩容:当一个类型的书达到计算机容量限度要可以扩容,达到增加书籍数量的目的;

1.1.2:关于空间使用 —例:PrintN函数实现:
写一个程序实现一个函数PrintN,使得传入的一个正整数为N的参数后,能顺序打印从1到N的全部整数

#include<stdio.h>
int N;
void printN1(int N){     //for循环实现
int i;
for(i = 1;i <= N; i++){
printf("%d、", i );
}
printf("\n");
}

void printN2(int N){    //递归实现
if(N){
printN2(N - 1);
printf("%d、", N );
}
}
int main(void){
scanf("%d" , &N);
printN1( N );
printN2( N );
}

1.1.3:关于算法效率 —例:计算多项式的值
写程序计算给定多项式 f(X)=a0+a1x+a2x^2 +…+anx^n 在给定点x处的值

#include<stdio.h>
#include<math.h>
#include<time.h>
clock_t start, stop;
double duration;
#define MAXN 10   //多项式最大项数,即多项式阶数+1
#define MAXK 1e7  //函数重复调用的最大次数
double f1( int n, double a[], double x ){
int i;
double p = a[0];
for(i = 1; i <= n; i++ )
p += (a[i] * pow(x,i));
return p;
}

double f2( int n , double a[] , double x ){
int i;
double p = a[n];
for( i=n ; i>0 ; i-- )
p = a[i-1] + x* p;
return p;
}
int main(void){
int i;
double a[MAXN];  //储存多项式的系数
for( i = 0 ; i < MAXN ; i++ )
a[i] = ( double ) i;

start = clock();
for( i=0 ; i<MAXK ; i++ )
f1(MAXN - 1, a , 1.1 );
stop = clock();
duration = ( (double) (stop - start) ) / CLK_TCK / MAXK;
printf("ticks1 = %f \n",(double)(stop - start));
printf("duration1 = %6.2e\n",duration);

start = clock();
for( i=0 ; i<MAXK ; i++ )
f2(MAXN - 1, a , 1.1 );
stop = clock();
duration = ( (double) (stop - start) ) / CLK_TCK / MAXK;
printf("ticks2 = %f \n",(double)(stop - start));
printf("duration2 = %6.2e\n",duration);

return 0;
}

写程序计算给定多项式 f(X)=1+x+x^2 /2+…+x^i/ i+…+x^100/100 在给定点x处的值

#include<stdio.h>
#include<math.h>
#include<time.h>
clock_t start, stop;
double duration;
int n = 100;
#define MAXK 2000  //函数重复调用的最大次数
double f1( double x , double a[]){
int i;
double p = a[0] = 1.0;
for(i = 1; i <= n; i++ ){

p += pow( x , i ) * a[i] ;
}
return p;
}

double f2( double x , double a[]){
int i;
double p = a[n];
for( i=n-1 ; i>=0 ; i-- ){
p = a[i]+ x * p ;
}
return p;
}
int main(void){
int i;
double a[ n + 1 ];
a[0] = 1.0;
for(i=1 ; i<= n ; i++ )
a[i] = 1 / (double)i;
start = clock();
for( i=0 ; i<MAXK ; i++ )
f1( 1.1 , a );
stop = clock();
printf("普通算法实现:\n");
printf("f(x) = %f\n",f1( 1.1 , a ));
duration = ( (double) (stop - start) ) / CLK_TCK / MAXK;
printf("程序运行2000次所用时间:ticks1 = %f \n",(double)(stop - start));
printf("平均时间:duration1 = %6.2e\n",duration);

start = clock();
for( i=0 ; i<MAXK ; i++ )
f2( 1.1 , a );
stop = clock();
printf("\n秦九韶算法实现:\n");
printf("f(x) = %f\n",f2( 1.1 , a ));
duration = ( (double) (stop - start) ) / CLK_TCK / MAXK;
printf("程序运行2000次所用时间:ticks2 = %f \n",(double)(stop - start));
printf("平均时间:duration2 = %6.2e\n",duration);

return 0;
}
  • 点赞
  • 收藏
  • 分享
  • 文章举报
奥兹"寮哆格尔玺* 发布了5 篇原创文章 · 获赞 0 · 访问量 118 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: