zoukankan      html  css  js  c++  java
  • 第一章:数据结构-绪论

    说明:本篇博文,作为个人的学习笔记使用。参考教材:[数据结构(c语言版)].严蔚敏

         数据结构系列,所有代码实现部分,复制即可运行。

       代码运行环境:Visual C++ 6.0

    一、什么是数据结构

    二、基本概念和术语  

    三、抽象数据类型的表示与实现

    四、算法和算法分析

    一、什么是数据结构

      1) 用计算机解决实际问题

      一般用计算机解决问题的步骤:

        1.从具体问题抽象成数据模型--》2.设计解决此模型的算法--》3.最后,编程-测试-调整至得到最终答案

      但是,有更多的问题是非数值计算型的,无法用数学方程描述:

        如:图书馆自动检索系统、人机对弈问题,多×路口,交通灯管理问题。

      简单来说,数据结构是一门研究非数值计算的程序设计问题中,计算机的操作对象以及它们之间的关系和操作等的学科。

      数据结构的重要性:

        在计算机科学中,数据结构 不仅是一般程序设计的基础,而且是设计和实现编译程序,操作系统,数据库系统以及其他系统程序应用程序的重要基础。

    二、基本概念和术语

      数据(data):

             可以输入到计算机中,并被计算机程序处理的符号 的 总称。

      数据元素 (data element):

          数据的基本单位。在计算机中通常作为一个整体考虑和处理。有时候一个数据元素包含多个数据项,如书的书目信息为一个数据元素,书目信息中的作者、书名就是一个数据项。

      数据对象(data object):

          是具有相同性质的数据元素的集合,是数据的一个子集。(列如:数据库中的一张表就是一个数据对象。整数集,字母集也是一个数据对象)

      数据结构(data structure):

          是相互之间一种或多种特定关系的数据元素的集合。

          数据元素之间的关系称为,结构。

      根据数据元素之间关系的不同,分为以下四种结构:

          1.集合:除同属于一个集合之外,没有任何其他关系

          2.线性结构:数据元素之间存在着一对一的关系

          3.树状结构:数据元素存在着一对多的关系

          4、网状或图状结构:数据元素间存在着多对多的关系

      数据结构的形式定义为:数据结构是一个二元组

        Data_Structure=( D , S )

        D是数据元素的有限集合,S是 D 上面 关系的有限集合。

      数据的逻辑结构:

        讨论数据结构的目的是,在计算中实现对它的操作,因此还需研究如何在计算机中表示它。

        数据结构在计算机中的表示(又称映像)称为 物理结构 又称存储结构。它包括数据元素的表示 和 关系的表示。

          计算机中表示信息的最小单位是 二进制数的一位,叫做 位(bit)。

          在计算机中 ,我们可以用多个位组合起来形成的一个位串来表示一个数据元素,通常称这个位串为元素(element) 或 结点(node)。

          当数据元素由若干个数据项组成的时候,位串中对应于各个数据项的子位串 称为:数据域。因此元素 或 结点可以看成是 数据元素在计算机中的映像。

        数据元素之间的关系:

          1.顺序映像

              特点:借助数据元素的 在 存储器 中的相对位置来表示数据元素之间的逻辑关系。

          2.非顺序映像

              特点:借助元素存储地址的指针(pointer)表示数据元素之间的逻辑关系。

        数据的逻辑结构和存储结构是密切相关的来个方面,任何一个算法的设计取决于选定的数据结构(逻辑结构),而算法的实现依赖于采用的 存储结构。

        数据类型:是和数据结构密切相关的一个概念,最早出现在高级程序语言中,用于刻画操作对象的特性。

             数据类型是一个值的集合和定义在这个值上集合的一组操作的总称。

        抽象数据类型(ADT):是指一个数学模型以及定义在该模型上的一组操作。抽象数据类型的定义仅仅取决于它的一组逻辑特性,而与其在计算机中如何表示,实现没有关系,即不论其内部机构如何变化,只要其数学特性不变,都不影响其外部使用。

              比如“整数”就是一种抽象数据类型,虽然在不同的处理器上实现方式不同,但对于用户来说都是一样的。

        一个含抽象数据类型的软件模块通常包含定义、表示和实现3个部分。

        抽象数据类型的定义:由一个值域和值域上的一组操作组成,按其值的特性可分为可细分为3中类型:

          1.原子型 :值是不可分解的,列如整数

          2.固定聚合型 :由确定数目的成分构成,例如复数,

          3.可变聚合型 :值的数目不确定,如一个有序整数序列

          后两种类型称为结构类型。

        和数据结构的形式相对应,抽象数据类型用三元组表示:

            (D, S , P)

        其中,D是数据对象,S是D上的关系集,P是对D的基本操作集,本书采用以下格式定义抽象数据类型

            ADT 抽象数据类型名{

              数据对象:《数据对象的定义》

              数据关系:《数据关系的定义》

              基本操作:《基本操作的定义》

            }ADT 抽象数据类型名

          基本操作的格式定义:

            基本操作名 (参数列表)                  赋值参数只提供输入值。引用参数以&打头,可以提供输入值还可以返回操作结果。

              初始条件:<初始条件描述>     描述了操作执行前 数据结构和参数应该满足的条件

              操作结果:<操作结果描述>

          

    三、抽象数据类型的表示与实现

      抽象数据类型可以通过固有类型来表示和实现, 即利用处理器中已有的数据类型来说明新的结构,用已实现的操作来组合新的操作。

    四、算法和算法分析

      算法(algorithm):

        是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每条指令表示一个或多个操作,此外一个算法还具有一下5个特性:

         1.有穷性  2确定性  3,可行性   4,输入    5 ,输出

      算法设计的要求:

        1.正确性   2.可读性    3.健壮性    4.效率与地存储量需求

      算法效率的度量:

        度量程序的执行时间通常有一下两种方法:

          1.事后统计方法

          2.事前分析估算的方法

        一个算法是由控制结构和原操作组成,则算法的时间取决于两者的综合效果

        用原操作执行的次数作为算法的时间度量:

          一般情况下,算法中基本操作执行的次数是问题规模 n 的某个函数 f(n),算法的时间度量记做:

            T(n)=O( f(n) )

          它表示岁问题规模n的不断增加,算法执行时间的增长率和 f(n) 的增长率相同,称做算法的渐进时间复杂度,简称时间复杂度

          一般时间复杂度用 常量阶 O(1) ,线性阶 O(n) , 平方阶 O(n 的平方) 对数阶 O(log n),指数阶 O(2 的n次方)

          注:有时候,算法的时间复杂度和 输入的数据有关系,如:冒泡排序。

      算法的存储空间需求:

        类似时间复杂度,此处以空间复杂度作为算法所需存储空间的度量:

          记作:S(n)= O(f(n))

  • 相关阅读:
    gitlab 国内镜像安装
    docker 安装和启动redis
    jenkins 国内镜像更新地址
    docker 安装 jenkins
    docker 使用阿里云镜像加速
    '
    windows/linux 命令可以用符号连接执行
    思科访问控制列表优先级
    交换机泛洪
    虚拟机floppy0
  • 原文地址:https://www.cnblogs.com/ahguSH/p/6165764.html
Copyright © 2011-2022 走看看