算法与数据结构 开篇概论

线索

数据结构课程的概论,从以下这条线索进行阐述:
问题 -> 数学化(数学建模) -> 选择数据结构DataStructure -> 算法Algorithm 及 设计步骤 -> 验证正确性 -> efficient效率检验 -> 程序实现

数据结构 和 数据类型

何为数据结构?

数据结构描述了数据对象之间的结构关系,是相互之间具有一种或者多种特定关系的数据集合。

数据结构,是抽象数据类型ADT的物理实现。

为什么要使用数据结构?

我们需要解决大量的非数值计算问题,由于问题求解的需要,我们经常要自定义一些数据类型和它的一些基础运算,来便于我们解决这些问题。因此我们有了 抽象数据类型(自定义的数据类型) 与 数据结构(抽象数据类型的物理实现)。

数据结构需要考虑哪些问题?

(1)数据的逻辑结构:主要分为 线性结构 和 非线性结构。线性结构有 线性表(数组),队列queue,栈stack等等;非线性结构有 树tree,图map,集合set等等。

(2)数据的物理结构:由数据的逻辑结构决定,在内存中的存储方式,有 连续的 和 不连续的 两种。连续:在内存中按 连续的相对位置 存放(数组);不连续:在内存中按 无序的相对位置 存放,由指针来确定位置。

(3)数据的运算:为了解决非数值问题,需要定义数据类型,实现数据结构,并定义数据类型的相关计算。

何为抽象数据类型ADT?为什么要使用ADT?

简单的来说,为了解决实际问题,我们 自定义 了一些拥有相同属性的数据,并把它们抽象成一个数据类型(非常像面向对象语言中 类的定义),就是抽象数据类型CDT了。
为了物理实现ADT,我们需要考虑三个方向的内容:1)数据的逻辑结构 2)数据的物理结构 3)数据的运算。引入了数据类型的物理实现:数据结构。

数据类型需要考虑哪些问题?

考虑1 相同数据类型的数据 需要具有哪些属性,即它的定义是什么。定义分为1)数据的特征 和 2)运算。
考虑2 在某种存储状态下,运算如何实现

类比于 C++等面向对象语言中的 class 需要考虑的问题:

  • 这个类里面需要具有哪些属性?
  • 这个类里面有哪些方法,需要怎么实现?

考虑1 对应于 数据结构中的逻辑结构。
考虑2 对应于 数据结构中的物理结构和运算。

数据结构 与 数据类型 的联系

数据是按照 数据结构 分类的。同一类数据 的全体 称为数据类型。
数据结构,是抽象数据类型的物理实现。它反映了 同一种数据类型所具有的属性 和 方法。

由于数据类型是按照数据结构划分的,因此,数据结构 和 数据类型 是紧密相连的,是一一对应的。

Algorithm 算法

确定完数据结构之后,我们需要选用策略来解决实际的问题。我们需要设计算法 来实现数据元素的逻辑关系结构,然后根据逻辑结构来选择物理存储方式。

posted @ 2016-09-01 14:55  Wasdns  阅读(231)  评论(0编辑  收藏  举报