什么是数据结构
- “数据结构是数据对象,以及存在于该对象的实例和组成实例的数据元素之间的各种联系。这些联系可以通过定义相关的函数来给出。”
–Sartaj Sahni《数据结构、算法与应用》 - “数据结构是ADT(抽象数据类型Abstract Data Type)的物理实现。”
–Clifford A.Shaffer《数据结构与算法分析》 - “数据结构(data structure)是计算机中存储、组织数据的方式。通常情况下,精心选择的数据结构可以带来最优效率的算法。”
–中文维基百科
可以看得出,“数据结构”同“算法”是经常同时出现的,那如何准确定义数据结构呢,我想仅凭两三句话是很难讲清楚的,我们不妨举三个例子:
- 如何在书架上摆放图书?
图书的摆放要使得两个相关操作方便实现:
操作1:新书怎么插入?
操作2:怎么找到某本指定的书?
方法1:随便放
操作1:新书怎么插入
--哪里有空放哪里,一步到位!
操作2:怎么找到某本指定的书?
--……累死
方法2: 按照书名的拼音字母顺序排放
操作1:新书怎么插入?
-- 新进一本《阿Q正传》……
操作2:怎么找到某本指定的书?
**二分查找!**
看得出操作1无法完成
方法3:把书架划分成几块区域,每块区域指定摆放某种类别的书;在每种类别内,按照书名的拼音字母顺序排放
这种方法的一个最大好处是,不管我在每一个类里面做什么样的操作,总归来说,这个图书的规模都小了很多
操作1:新书怎么插入
--先定类别,二分查找确定位置,移出空位
操作2:怎么找到某本指定的书?
--先定类别,再二分查找
——问题:空间如何分配?类别应该分多细?
需要多大的书架,类需要分多细,这也是很令人头痛的问题
解决问题方法的效率,跟数据的组织方式有关
- 写程序实现一个函数PrintN,使得传入一个正整数为N的参数后,能顺序打印从1到N的全部正整数
循环实现
void PrintN(int N)
{
int i;
for(i=1;i<=0;i++)
{
print("%d\n",i);
}
return;
}
递归实现
void PrintN(int N)
{
if(N)
{
PrintN(N-1);
printf("%d\n",N);
}
return;
}
测试函数
#include<stdio.h>
void PrintN(int N);
int main()
{
int N;
scanf("%d",&N)
PrintN(N);
return 0;
}
递归函数对空间的占用有时会是很恐怖的,比如我们这道题,它会非正常中止
解决问题方法的效率,跟空间的利用效率有关
3.写程序计算给定多项式在给定点x处的值
f ( x ) f(x) f(x)= a 0 a_0 a0+ a 1 a_1 a1 x x x+…+