• 数据结构与算法——基本概念和术语


     🍓个人主页:bit..

     🍒系列专栏:Linux(Ubuntu)入门必看   C语言刷题

    目录

    一.基本概念

    数据(Data):

    数据元素和数据项

    数据对象:

    数据元素和数据对象的关系

    二.数据结构

    数据结构包括的内容:

    数据结构的两个层次

    逻辑结构与存储结构的关系

    逻辑结构的种类

    存储结构的种类

    三.数据内型和抽象数据类型

    数据类型,type>

    抽象数据类型的定义

    数据类型的定义格式

    基本操作定义格式说明:

    抽象数据类型(ADT)定义举例:


    一.基本概念

    数据(Data):

            1.是能输入计算机且能够被计算机处理的各种符号的集合。

            2.信息的载体。

            3.能够被计算机识别和加工   包括:数值型的数据:整形,实形。  非数值型的数据:文字,图像,图像,声音等。

    数据元素和数据项

            1.数据元素:是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理

            2.也简称为元素,或者称为记录,结点,顶点

            3.一个数据元素可以由若干给数据项组成

    数据项:

            构成数据元素不可分割的最小单位

    数据和数据元素和数据项的关系

            数据>数据元素>数据项

    数据对象:

            是性质相同的数据元素的集合,是数据的一个子集

            例如:整数数据对象是集合N={0,±1,±2,……}

                        字母字符数据对象是集合C={‘A’,‘B’,……,‘Z’}

    数据元素和数据对象的关系

        数据元素是组成数据的基本单位。与数据的关系:是集合的个体。

        数据对象是性质相同元素的集合。与数据对象的关系:集合的子集。

    二.数据结构

        数据元素不是孤立存在的,他们直接存在莫种关系,数据元素直接的关系称为数据结构

    是指相互之间存在一种或者多种特定关系的数据元素集合或者说,数据结构是带结构的数据元素的集合。

    数据结构包括的内容:

    1.逻辑关系

    2.存储关系或者数据的物理结构(数据元素及其关系在计算机内存中的表示 又称为映射)

    3.运算和实现 (对元素可以施加的操作以及这些操作在相应的存储结构上的实现)

    数据结构的两个层次

    1.逻辑结构

    • 描述数据结构之间的逻辑关系
    • 与数据的存储无关,独立于计算机
    • 是从具体问题抽象出来的数学模型

    2.物理结构(存储结构)

    • 数据元素及其关系在计算机存储器中的结构(存储方式)
    • 是数据结构在计算机中的表示

    逻辑结构与存储结构的关系

    • 存储结构是逻辑关系的映射与元素本身的映像
    • 逻辑结构是数据结构的抽象,存储结构是数据结构的实现
    • 两者综合起来建立了数据元素之间的结构关系

    逻辑结构的种类

    • 线性结构     

    最多一个前驱一个后驱,一个开始结点,一个终端结点。    eg:线性表,栈,队列,传等。

    • 非线性结构(一对多) 

    一个结点可能有多个直接前驱和直接后继

    eg:数,图,人机对弈等。

    存储结构的种类

    1.顺序存储结构

    •     用一组连续的存储单元依次存储数据元素,数据元素之间的逻辑关系,数据之间的逻辑关系由元素的储存位置
    •     在C语言中用参数组来实现顺序存储结构

    2.链式存储结构

    • 用一组任意的存储单元存储数据元素,数据元素之间的逻辑关系用指针来表示
    • C语言中用指针来实现链式存储结构

    3.索引存储结构

    • 在存储结点信息的同时,还可以建立附加的索引表     例如:通讯录

    4.散列存储结构

    • 根据结点的关键字直接计算出该结点的存储地址

    三.数据内型和抽象数据类型

    数据类型

     1. 在使用高级程序设计语言编写程序时,必须对程序中出现的变量,长量,或表达式定义

    例如:int ,char,float,double    ......

    数组,结构,共用体,枚举等构造数据内型。

    用户也可以用typedef自己定义数据内型

    2.一些最基础的数据结构可以用数组类型来实现,如数组,字符串。

    3.而另外一些常用的数据结构,如栈,队列,数,图等,不能直接用数据类型来表示。

        高级语言中的数据数据类型明显地或隐含地规定了在程序执行期变量和表达式的所有可能的取值范围,以及在这数值范围上所允许的操作。    列如:C语言中定义变量i为int类型,就表明i是【min,max】范围的整数在这个整数集上可以进行“+,-,*,\,%”等操作。

    数据类型的作用:1.约束变量或常量的取值范围       2.约束变量或者常量的操作

    数据类型

      定义:数据类型是一组性质相同的值的集合以及的定义于这个值集合上的一组操作的总称。

                    数据类型=值的类型+值集合上的一组操作

    抽象数据类型:

         是指一个数学模型以及定义在此数学模型上的一组操作。

    •         由用户定义,从问题抽象出数据模型(逻辑结构)
    •         还包括定义在数据模型上的一组抽象运算(相关操作)
    •         不考虑计算机内的具体存储结构与算法的具体实现

    抽象数据类型的定义

        抽象数据类型可用(D,S,P)三个元素组表示

        D:数据对象;           S:S是D上的关系集;   P: 是对象D的基本操作集;

    数据类型的定义格式

     ADT     抽象数据类型名{

                                    数据对象:<定义>

                                    数据关系:<定义>

                                    数据操作:<定义>         

                                            }ADT 抽象数据类型名

    其中数据对象和数据关系的定义用伪代码描述。

    伪代码:是一种算法描述语言,使用伪代码的目的是一种为了使被描述的算法可以容易地以任意一种编程语言实现。

    基本操作的定义格式为:1.基本操作名(参数表)2.初始条件(初始条件描述)3.操作结果:(操作结果描述)

    基本操作定义格式说明:

    1.参数表:赋值参数只为操作提供输入值  eg:area(r)   power(x,y )          引用参数 以&打头,除可以提供输入值外还可以将值返回。

    eg:   缩放操作  G1=scale (G,n)

            操作完成用自象返回:scale (&G,n)

    2.初始条件:

      描述操作执行之前数据结构和参数应满足的条件,若不满足,则操作失败,并返回相应的错误信息。若初始条件为空,则省略之。

    3.操作结果

          说明操作正常完成之后,数据结构的变化状况和应返回的结果。

    抽象数据类型(ADT)定义举例:

    1.计算圆的周长

    ADT Circle{

            数据对象:D={r,x,y|r,x,y都是实数}

            数据关系:R={|r是半径,为圆心}

            基本操作:circle(&c,r,x,y)

            double Area(c)

                            初始条件:圆已存在

                            操作结果:计算面积

            double cicumference(c)

                            初始条件:圆已存在

                            操作结果:   计算周长

            …………

    }ADT  Circle

    2.复数的定义

    ADT complex{

            D={r1,r2|r1,r2为实数}

            S={|r1是实部,r2是虚部}

    assige (&c,v1,v2)

            初始条件:空的复数c已存在

            操作结果:构造的复数c,r1,r2分别被赋以参数v1,v2的值

    destroy(&c)

            初始条件:复数c已存在

            操作结果:复数c被销毁

    …………

    }ADT  complex

    }

  • 相关阅读:
    基于动作捕捉的飞行机械臂定位算法验证研究
    java学习--字符流
    Android 13中的 Open Mobile API
    【AnolisOS 8.x】配置本地 repo 源
    C++二分算法:黑名单中的随机数
    springboot福佳生活超市进销存管理系统毕业设计源码261620
    python批量重命名工具
    如何做项目的权限控制?
    2022-11-02 myql-StarRocks-Join 查询优化
    全栈软件开发人员提问常用的ChatGPT通用提示词模板
  • 原文地址:https://blog.csdn.net/weixin_68773927/article/details/127047964