【浙大数据结构学习笔记】1.1、什么是数据结构

浙大数据结构学习笔记之第一讲什么是数据结构

什么是数据结构

什么是数据结构?没有明确定义,陈越老师用 例1:如何摆放书架上的书籍 来引入。

要求:
图书的摆放要使两个相关操作得以方便实现:、

  1. 操作1:新书怎么插入?
  2. 操作2:已插入图书怎么寻找?

相对不好的实现方法:

  1. 随便放
  2. 按照字母顺序进行查找

这两类方法在数量大时都不易查找,量小时无所谓。

相对较好的实现方法:

  1. 操作1:新书怎么插入?
    将图书分为不同的类别,同类别中按照字母顺序排放。插入新书时,按照二分法查找,留出空位。
  2. 操作2:已插入图书怎么寻找?
    先定类别,再按二分法定位。

随之而来的有两个问题:怎么分类?分类具体有多细?

结论1: 解决问题方法的效率,和组织数据的方式有关。

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

很简单的问题,但是有不同的实现方法:

  1. 循环实现
void PrintN(int N){
	for(int i=1;i<=N;i++)
		printf("%d\n",i);
}
  1. 递归实现
    简洁、易于理解,但不易实现,空间复杂度高。
void PrintN(int N)
{
	if(N)
	{
		PrintN(N-1);
		printf("%d\n",N);
	}else{
		return;
	}
}

结论2: 解决问题方法的效率,和空间利用率有关。

例3:写程序计算给定多项式在给定点x处的值

  1. 暴力实现
double f(int n,double a[],double x){
	double sum=a[0];
	for(int i=1;i<n;i++)
	{
		sum+=a[i]*pow(x,i);
	}
	return sum;
}
  1. 按数学公式改进
double f(int n,double a[],double x){
	double sum=a[n];
	for(int i=n;i>0;i--)
	{
		sum=a[i-1]+x*sum;
	}
	return sum;
}

**例3:写程序计算给定多项式在给定点 x = 1.2 处的值 f(1.2)**

#include <stdio.h> 
#include <math.h> 
#include <time.h> 

clock_t start,stop;

#define MAX 100000  /*多项式最大项数*/
#define COUNT 1e7	/*被测函数调用充分大次数方便计算*/

/*暴力法*/ 
double f1(int n,double a[],double x){
	double sum=a[0];
	for(int j=0;j<COUNT;j++){
			for(int i=1;i<n;i++)
		{
			sum+=a[i]*pow(x,i);
		}
	}
	return sum;
}
/*公式法*/ 
double f2(int n,double a[],double x){
	double sum=a[n];
	for(int j=0;j<COUNT;j++){
		for(int i=n;i>0;i--)
		{
			sum=a[i-1]+x*sum;
		}
	}
	return sum;
}
int main(void)
{
	double a[MAX];	 /*多项式系数*/
	double duration; /*被测函数所用时间*/ 
	
	for(int i=0;i<MAX;i++)
	a[i]=i+1;
	
	start=clock();	 /*开始计时*/
	f1(MAX,a,1.1);
	stop=clock(); 	 /*结束计时*/
	duration=((double)(stop-start))/CLK_TCK;
	printf("%f\n",duration/COUNT);
	printf("%6.2e\n",duration/COUNT);
	
	start=clock();
	f2(MAX,a,1.1);
	stop=clock();
	duration=((double)(stop-start))/CLK_TCK;
	printf("%f\n",duration/COUNT);
	printf("%6.2e\n",duration/COUNT);
	
	return 0;
}

结论3: 解决问题方法的效率,和算法的巧妙程度有关。

所以什么才是数据结构?

数据对象在计算机中的组织方式:逻辑结构和物理存储结构;
数据对象必然与加在其上的一系列的操作有关;
完成这些操作所用的方法就是算法

以下部分感到难以理解:
在这里插入图片描述

**例4:“矩阵”的抽象数据类型定义**

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值