数据结构与算法入门(1)--基本概念

来源:互联网 发布:恶灵附身2优化这么样 编辑:程序博客网 时间:2024/06/05 05:01

数据结构与算法入门(1)–基本概念

本节知识框架

  • 数据结构
    在谈论数据结构(data structure)前,我们先要弄清楚一些概念。
    1. 数据–数据是信息的载体。大千世界,数据无处不在。由此可见,数据是一个很大的概念,包含我们下面要讲的一系列概念。有关数据的进一步描述,可以在Wikipedia或者百度上查阅。
    2. 数据元素– 数据的基本单位。通常作为一个整体,但如果继续划分,数据元素可以继续分为数据项。
    3. 数据对象–具有相同属性数据元素的集合。为数据的一个子集。

举个例子
假如我们需要建立一个学生数据管理系统。我们需要收集学生的数据。建立的目标数据库应该如下表所示
|学生信息|
|学生 一|
|学生 二|
|学生 三|
|学生 四|
在学生数据管理系统中,数据元素为每一个学生的信息(如:学生一,学生二,学生三分别为三个数据元素)。每一个学生的信息包含如id,姓名,年龄等等的数据项。学生一和学生二组成的集合则是数据对象。 把整个数据库中的学生信息都合并成一个集合,这个集合就是我们经常说的概念数据.
读到这里,你可能会问:我们不是讲数据结构吗?怎么用数据库举例子?实际上,数据库软件开发的思想与数据结构的概念连接的很紧密。两着都是对数据进行操作与管理。所以,学习数据结构有助于后续数据库的学习,反过来数据库中的模型与概念也有利于理解数据结构中的概念。上述例子就是一个典型的关系型数据库。


接下来我们介绍数据结构中的两个核心概念了:

  1. 数据类型(data type)–值的集合+定义在此集合上的操作
    比如:C语言中,我们定义了一个int型变量(variable)a。那么a的取值范围就固定了(64位操作系统为例,取值范围为-2^63~2^63-1),同时我们定义了a的运算(如:+ - * / % // 等)
    数据类型主要有三种:
    -原子类型(其值不可再分的类型)
    比如:int float char bool
    -结构类型(其值可再分的类型,类比C语言中的结构和数学中的向量)
    比如: C中的结构体
    Struct student {
    int id;
    char name[20];
    };
    -抽象数据类型(ADT,由数据对象,数据关系和基本操作集组成。定义一个ADT仅取决于逻辑特性)
    比如:C++中的抽象类
  2. 数据结构
    -为什么要有数据结构?


    在任何问题中,数据元素并不是孤立存在的,他们之间存在着某种联系。这种联系叫做结构(structure)
    相互之间存在一种或多种联系的数据元素的集合叫做数据结构
    思考一下:数据结构和数据对象有何异同?


    -设计与实现的关系?


  算法的设计取决于数据的逻辑结构,而算法的实现取决于数据的存储结构。  算法的设计与实现分离 

  • 数据结构三要素—逻辑结构,物理结构,数据运算
    这是整个数据结构和算法课的核心内容,我会在后面的blog详细的介绍。

    • 逻辑结构

      • 线性结构 – 只存在一对多的关系
        • 受限线性表
          • 栈和队列
        • 一般线性表
        • 推广线性表
          • 数组
          • 广义表
      • 非线性结构
        • 集合 —除了同属一个集合,无其他关系
        • 树 —存在一对多的关系
        • 图 – 存在多对多的关系
    • 物理结构

      • 顺序结构 — 逻辑上连续,物理上也连续
      • 链式结构 — 一个指针串起来所有的物理存储空间
      • 索引结构 – 存储信息+索引表
      • 散列结构(hash存储) –关键是冲突
    • 数据运算

      • 运算的定义 — 逻辑结构
      • 运算的实现 — 物理结构

了解data type和data structure 两个概念之后,下面我们用一句话来总结什么是数据结构与算法:

在面对现实中错综复杂的问题,我们通过不同的数据类型和数据结构,将数据存储在主存储器中。在此基础上为实现某一功能而执行相应的操作,这些操作叫做算法。

如何理解这句话?
1. 不同的问题,采用不同的数据结构。比如:15个学生的信息存储使用数组,150个学生使用链表。人事组织关系架构使用树结构,地图路径导航使用图结构。
2. 不同的数据结构使用不同的算法。 比如: 对数组的遍历算法与对链表的遍历算法不同。
3. 在2的基础上,我们可以更深入的理解泛型的概念。泛型就是针对不同的数据结构,提供一种通用的算法。

总之,如果用最简单的一句话概括数据结构与算法,那么数据结构=个体的存储+个体关系的存储,算法=对所存储数据的操作。


0 0