很早就知道了‘程序=算法+数据结构’,但是直到现在还没有搞明白自己的数据结构处于什么一个阶段。借此系列文章总结一下自己的水平吧。
本部分只记录数据结构和对数据结构的基本操作,基本操作是指增删改操作,不记录算法,如查找、排序等高级操作。如果在基本操作中需要使用到查找等算法的时候,则使用抽象操作。这将使得数据结构比较简单,易于描述。同时将在算法中再描述高级操作。
计划按照如下目录总结:
1. 概述
2. 顺序存储结构
3. 链式存储结构
4. 索引存储结构
5. 散列存储结构
一、计算机学科中的数据结构
如下部分引用自
http://www.jpk.pku.edu.cn/pkujpk/course/sjjg/report/report.html
1.“数据结构与算法”课程与计算机专业其他课程的关系
“数据结构与算法”是计算机专业的核心课程之一,本科教学的重中之重。如下图所示,本课程上承“计算概论”与“程序设计实习”,下启“算法分析与设计”和“计算复杂性理论”,同时是操作系统、软件工程、数据库概论、编译技术、人工智能、计算机图形学等专业课程的必修先行课。很多应用软件都要使用到各种数据结构和算法编写程序进行科学计算、模拟试验等。
2.数据结构与算法的知识体系
数据结构,就是由某种逻辑关系组织起来的一批数据,按一定的存储方法被存储于计算机中,并在这些数据上定义了一个运算的集合。数据结构具有三个方面:数据的逻辑结构、数据的存储结构和数据的运算。
常见逻辑关系有:线性结构、树形结构、图结构和文件结构。常见的存储方法有:顺序方法、链接方法、索引方法、散列方法。
对于一种数据结构,往往需要定义一些运算。排序、检索是最经典的运算,为了加快检索速度往往需要预先建立索引。内存索引主要用BST(二叉搜索树),外存索引常用倒排和B+树。
算法分析技术有助于根据问题的性质选择合理的数据结构,并对时间空间复杂性进行必要的控制。对于存储外存中的文件数据的访问速度,对文件的操作运算应该尽量减少访外次数。
抽象数据类型(Abstract Data Type,简称“ADT”)是定义了一组运算的数学模型,这种抽象的数据类型可以在较高级的算法中直接引用,而不用其实现细节,很好地支持了逻辑设计和物理实现的分离。
二、项目中的数据结构
在实际工作中,数据结构是程序的基本组件,可是我们并不会经常写数据结构代码。
为什么呢?
因为数据结构在基本的代码库中或者在程序语言中就已经提供了。
1. 程序设计语言中的数据结构
2. 程序设计语言库中的数据结构
3. 数据结构与抽象数据类型
三、用好数据结构的方法
1. 理解逻辑结构到存储结构的映射
2. 理解实际信息到逻辑结构的映射
3. 理解数据结构的性能特征