第二话:数据结构的历史与来由
2012-06-06 00:00
1896 查看
一些数据结构的历史
有句话是这么说的,程序 = 数据 + 算法。这里的数据,是数据结构吗?不完全对噢。记得Pascal之父、结构化程序设计的先驱Niklaus Wirth最著名的一本书,书名叫作《算法+数据结构=程序》,所以我觉得这里的数据应该是数据结构才对。
算法与数据结构之于程序设计的重要性不言自明。那么,什么是算法?什么是数据结构?什么又是程序呢?
我们先从阐明大家最为熟悉的“程序”的概念入手。程序是计算机指令的某种组合,控制计算机的工作流程,完成一定的逻辑功能,以实现某种任务;
再来看什么是算法,算法是程序的逻辑抽象,是解决某类客观问题的数学过程;
最后我们来看一看数据结构又是什么呢?在这里,数据结构具有两个层面上的涵义--逻辑结构和物理结构:客观事物自身所具有的结构特点,我们将其称之为逻辑结构。如家族谱系是一个天然的树型逻辑结构。而逻辑结构在计算机中的具体实现则称之为物理结构。如树型逻辑结构是用指针表示还是使用数组实现。
仔细体会一下,就会发现算法与数据结构间的紧密性。用一个较为贴切的例子来形容,若把数据结构喻为建筑工程中的建筑设计图,那么算法就是工程中的施工流程图。数据结构与算法呈相互依托的关系,恰当的确立了问题的结构,问题的解决才能根据确立的层次结构选择合适的解决方法。因此任何讲解数据结构的书都不可能撇开算法,单单介绍数据结构,反之亦然。
那就是说,程序设计的实质是对确定的问题选择一种好的结构,加上设计一种好的算法。
是的。早期人们都把计算机理解为数值计算工具,就是感觉计算机当然是用来计算的,所以计算机解决问题,应该是先从具体问题中抽象出一个适当的数据模型,设计出一个解此数据模型的算法,然后再编写程序,得到一个实际的软件。
可现实中,我们更多的不是解决数值计算的问题,而是需要一些更科学有效的手段(比如表、树和图等数据结构)的帮助,才能更好地处理问题。所以数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。
1968年,美国的高德纳(DonaU E. Knuth)教授在其所写的《计算机程序设计艺术》第一卷《基本算法》中,较系统地阐述了数据的逻辑结构和存储结构及其操作, 开创了数据结构的课程体系。同年,数据结构作为一门独立的课程,在计算机科学的学位课程中开始出现。也就是说,那之后计算机相关专业的学生开始接受《数据结构》的“折磨”其实应该是享受才对。
之后,70年代初,出现了大型程序,软件也开始相对独立,结构程序设计成为程序设计方法学的主要内容,人们越来越重视“数据结构”。
延伸阅读
此文章所在专题列表如下:第一话:你的数据结构怎么学的?
第二话:数据结构的历史与来由
第三话:关于数据结构的一些概念
第四话:数据的逻辑结构
第五话:数据的物理结构
第六话:关于数据类型
第七话:抽象数据类型ADT
第八话:补充数据结构基本概念的关系
第九话:数据结构与算法的关系
第10话:什么是算法?
第11话:算法的五个基本特征
第12话:什么样的算法才是好算法
第13话:算法的性能分析
第14话:如何计算算法的时间复杂度
第15话:算法的最坏情况与平均情况
第16话:算法的空间复杂度
相关文章推荐
- 【ShancoLove】带你看数据结构——第二课:线性表顺序结构
- 考察数据结构 第二部分:队列、堆栈和哈希表[译]
- 考察数据结构——第二部分:队列、堆栈和哈希表[译]
- U-Boot第二阶段之初解二个重要的数据结构gd_t与bd_t
- java语言学习001_她的来由(历史)
- 最近邻算法和向量模型——第二部分——算法和数据结构
- 数据结构第二讲:线性结构
- 考察数据结构——第二部分:队列、堆栈和哈希表[译]
- 操作系统第二课(一)—追寻历史的足迹
- 数据结构第二讲笔记之线性表(1)
- [置顶] NOIP前夕模板整理第二弹:数据结构
- 考察数据结构——第二部分:队列、堆栈和哈希表[译]
- 考察数据结构——第二部分:队列、堆栈和哈希表[译]
- 数据结构第二讲笔记之栈、队列(2)
- [数据结构]第二章--线性表(读书笔记2)
- 王彪20162321 2017-2018程序设计与数据结构-第二学期-第一周学习总结
- 考察数据结构——第二部分:队列、堆栈和哈希表[译]
- WebService第二课 CXF功能概述_CXF发展历史和使用CXF开发WebService服务器端
- 数据结构 C#描述 第七章 第二部分
- Python培训知识总结系列- 第二章Python数据结构第二部分,字符串拼接