数据结构与算法:基础概念解析

发表时间: 2021-03-15 06:02

持续分享嵌入式技术,操作系统,算法,c语言/python等,欢迎小友关注支持

数据结构介绍

“程序(Program)=数据结构(Data Structure)+算法(Algorithm)”

数据结构是计算机专业中一门综合性的基础课程,它是介于数学,计算机硬件和计算机软件的三者之间一门核心课程,同时,数据结构是设计数据库,程序,操作系统,游戏等等设计方面的重要基础,是绝大多数计算机专业考研的指定科目,也是大公司面试时常考科目,同时,也是高中及大学的学科竞赛中必备知识,优秀的数据结构和算法,可见数据结构在计算机课程中的重要性。

计算机的算法与数据结构密切相关,算法无不依赖于数据结构,而数据结构也关系到算法的效率,直接决定了一个程序的好坏。

数据结构,直白地理解,就是研究数据的存储方式。

我们知道,数据存储只有一个目的,即为了方便后期对数据的再利用,就如同我们使用数组存储 {1,2,3,4,5} 是为了后期取得它们的加和值,无缘由的数据存储行为是对存储空间的不负责任。
因此,数据在计算机存储空间的存放,决不是胡乱的,这就要求我们选择一种好的方式来存储数据,而这也是数据结构的核心内容。

数据结构发展史

1) 起源:

1968年美国唐•欧•克努特教授开创了数据结构的最初体系,他所著的《计算机程序设计技巧》第一卷《基本算法》是第一本较系统地阐述数据的逻辑结构和存储结构语其操作的著作。我们一般认为本书开创了数据结构的系统概念。

70年代初,数据结构作为一门独立的课程开始进入大学课堂。

数据结构的发展经历三个阶段:无结构阶段,结构化阶段和面向对象阶段(和程序发展的三个阶段不谋而合了)

2) 无结构阶段

40~60年代间,计算机的主要应用还没有如此普及,当时计算机主要是针对科学计算,程序设计技术以机器语言和汇编语言为主,程序处理的是存粹的数值,数据之间的关系主要是以来数学公式或者数学模型,此时数据结构概念并没有明确形成。

3)结构化阶段

60~80年代,计算机开始广泛应用于非数值处理领域,数据表示成为程序设计的重要问题,人们认识到程序设计规范化的重要性,提出了程序结构模块化,并开始注意数据表示与操作的结构化。数据结构及抽象数据类型就是在这种情况下形成的,随着数据规模的加大,程序的设计越来越依附于数据结构的设计,此时数据结构开始广泛普及。

此间也有非常多的数据结构相关的文献产出,最为著名的是图灵奖获得者沃斯的一个著名公式:程序=数据结构+算法

4)面向对象阶段

80年代初期到现在,随着计算机不断普及,计算机性能以及需求不断增加,面向对象的程序设计被逐步提出,在对象的世界中 ,程序设计中大大减少了重复设计的部分,数据结构在这个阶段逐渐变得丰富,大量的封装类出现,减少了程序设计者的负担,数据结构因此变得更加友好。

何为算法

计算1到100的和(1+2+3+……+100),大家在上学的时候经常遇到这种数学题吧,这种题最通俗的计算方式就是遍历数据累加求和,c语言的表示如下所示:

#include <stdio.h>int main() {    int ans=0,i;    for(i=1;i<=100;i++){        ans+=i;    }    printf("%d",ans);    return 0;}

然而我们都知道有个小学生高斯发现了一个更加简单的计算方式,这种计算方法叫做等差数列,如果用c语言表示,代码如下所示:

#include <stdio.h>int main() {    int ans=(1+100)*100/2;    printf("%d",ans);    return 0;}

相比第一份答案,我们进行了100次的运算,才得出我们想要的结果,而对于第二份答案,我们仅进行了1次运算就得到了想要的结果,而在实际中计算机的计算远远不止这点计算量,以此如果我们去计算1到1000000的和呢?

使用了等差数列还是一步算好,而这就是算法的魅力。