1.1 数据结构的概念
数据结构是一门研究非数值计算程序设计中计算机的操作对象以及它们之间的关系和运算等的学科.
1.2 相关的概念和术语
- 数据:是信息的载体,它能够被计算机识别,存储和加工处理,它是计算机程序加工的原料.它可以是数值数据,也可以是非数值数据.
- 数据项:具有独立含义的标识单位,是数据不可分割的最小单位.数据项具有一定的类型,以数据项的取值类型而定.
- 数据元素:是数据的基本单位.在不同条件下,数据元素又可以称为元素,结点,顶点等.
- 数据对象:具有相同性质的数据元素的集合.在某个具体问题中,数据元素都具有相同的性质(元素值不一定相等),属于同一数据对象(数据对象类),数据元素是数据元素类的一个实例.
- 数据结构:是指互相之间存在着一种或者多种特定关系的数据元素的集合.
1.3 抽象数据类型
抽象数据类型是指一个数学模型以及定义在该模型上的一组操作.抽象数据类型的定义取决于它的一组逻辑特性,而与其在件算计内部如何表示和实现无关.
1.4 算法和算法分析
算法是对待特定问题求解步骤的一种描述,是指令的有限序列.算法应该具有以下特性:
- 有穷性
- 确定性
- 可行性
- 输入(一个算法具有零个或者多个输入)
- 输出(一个算法具有一个或者多个输出)
设计一个好的算法通常需要考虑以下要求: 正确,可读,健壮,高效.
1.5 算法性能分析和度量
求解同一个问题,可以有许多不同的算法,那么如何评价算法的优劣?
- 执行算法所耗费的时间
- 执行算法所耗费的存储空间,其中主要考虑辅助存储空间
- 算法应该易于理解,易于编码,易于调试
然而计算硬件等各种因素不能确定的情况下,很难计算算法的执行时间,于是我们采用以下两种指标:
- 时间复杂度
一个程序的时间复杂度是指程序运行从开始到结束所需要的时间T(n),一般要精确计算T(n)很困难,于是我们引入"渐近时间复杂度"
T(n)=2,7*n^3+3.8*n^2+5.3 则T(n)=O(n^3)
时间复杂度的排序:
O(1)<O(log(n)<O(n)<O(nlog(n))<O(n^2)<O(n^3)<...<O(2^n)
2. 空间复杂度
一个程序的空间复杂度是指程序运行从开始到结束所需要的存储量.S(n)=O(f(n))
程序设计部分:
首先,这里介绍一下k阶的斐波那契数列
定义:f0=0,f1=0,...,f(k-2)=0,f(k-1)=1;
fn=f(n-1)+f(n-2)+...+f(n-k) ,n=k,k+1,...
试编写k阶斐波那契序列的第m项值的函数算法,k和m均以参数的形式在参量表中出现
int k_fib(int k,int m) { int f; if(m<k-1) f=0; else if(m==k-1) f=1; else { f=0; for(int i=1;i<=k;i++) f+=k_fib(k,m-i); } return f; }
一元多项式的计算
#include<iostream> using namespace std; int main(void) { int i,n; double x,a,s; cin>>n; cin>>x; s=0; for(i=0;i<=n;i++) { cin>>a; s=s*x+p; //a下标依次是n,n-1,n-2,...0 } cout<<s<<endl; }