无论在哪个领域,最终都需要我们找到解决问题的具体方案、具体步骤,大到修建一栋大厦,小到做一次美味的晚餐。其实这里的具体步骤就是算法,计算机行业也不例外。
然而现实中的很多问题比较抽象、复杂,难以直接找到具体的实施步骤。但不同领域、不同问题也有许多共通之处,是吧? 所以,计算机程序设计中为了找到所谓的“算法”,我们从很多问题中总结并抽象出了“数据结构”这一事物,来帮助我们找到“算法”。数据结构即数学上构建出来的数学模型。
计算机中从逻辑结构和物理结构上看
逻辑结构:强调数据对象中的元素之间什么样的关系。如:集合关系的集合结构,线性关系的线性结构,树形关系的树形结构,图形关系的图形结构。
物理结构:强调逻辑结构在计算机中的存储方式,顺序存储,链式存储。
算法是针对特定问题的求解步骤。
我们来看一个问题:求解1+2+3 …… +100的和。
为了解决问题,我们辅之以数据结构:将1,2……100以数组存放。这里的数组,逻辑上就是线性关系;物理上来说就是顺序存储。当然也可以建立链式存储,目前只以顺序存储为例。
/*
数据结构建模
*/
array[100]; // 声明数组
// 逻辑 线性结构,物理 顺序存储
for(i = 0; i < 100; i++)
{
array[i]=i + 1;
}
好了,现在我们采取不同的算法来求解:
算法2:累加
// 算法一
int sum=0;
for(i = 0; i < 100; i++)
{
sum=sum + array[i];
}
输出结果;
算法2:高斯算法
// 算法二
int sum = 0, n = 100;
sum = (1 + n) * n / 2 ;
输出结果;
很明显,对同一建模的数据结构,采用不同的算法,效率是不一样的。