zoukankan      html  css  js  c++  java
  • 数据结构之线性表的含义和线性表的抽象数据类型

        我们知道,数据结构当中分为逻辑结构和物理结构。逻辑结构里面又分为好几个结构。其中有一个是线性结构。

        线性结构中的数据元素之间是一对一的关系。线性表和这个很类似,也是一对一,像极了物理结构当中的顺序存储结构。

       线性表的定义是这样的就是它的含义:零个或多个数据元素的有限序列。线性表(List)

       那什么是数据元素呢?

      1、数据是描述客观事物的符号,是计算机可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。

      2、数据元素:数据元素是组成数据的有一定意义的基本单位,也被称之为记录。

      就是相当于狗,猫,老虎,大象这些动物是禽类的数据元素。

      3、数据项:一个数据元素由多个数据项组成,数据项是最小的单位,它是不可分割的,一定存在的。

      通俗点说:数据项就相当于人的鼻子,耳朵,头脑,大腿这些器官,是这些器官组合成了一个人。同理你懂得。

      他们有个关系链是这样的:数据是由多个数据元素组合而成,一个数据元素由多个数据项组成。

       #暂时就这样理解吧

        刚刚我们讲解了线性结构。线性表和它类似。而且我们还介绍他的定义。但是印象应该不怎么深刻,让我们图解:

      

    这就是线性表,这里长度为4,这是有限序列。他们的关系是这样的:

         1是2的直接前驱元素

        3是2的直接后驱元素

      长度肯定是:(n>=0) //n=0的时候,线性表为空

    现在我们知道了线性表是什么,线性表里面的一些关系。

         现在我们再说说数据类型。  

      数据类型:是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。

       简单点说意思就是他们的数据类型相同并且在相同的集合上。

      1<2  //True   都是数字/整数类型之间比较,他们性质是相同的

      'a'<2 //False甚至会报错   字符串和数字/整数类型之间比较,两个类型不同所以会报错或者返回False,一般会报错a未定义。

    数据类型可以分为两类:

    用C的来讲解说明:

    1、原子类型:是不可以再分解的基本类型,包括整型,实型,字符型。

    2、结构类型:由若干个类型组合而成。是可以再分解的。例如整型数组由若干个整型数据组成。

    现在我们介绍了数据类型。

    下面介绍抽象

         抽象是指抽出事物具有普遍性的本质。它是抽出问题的特征而忽略非本质的细节,是对具体事物的一个概括。

          简单点说就是保留最核心最重要的部分,其他的边边角角全部扔掉  

    下面介绍抽象数据类型

      我们对已有的数据类型进行抽象,就有了抽象数据类型。

      抽象数据类型:是指一个数学模型定义在该模型上的一组操作。

     //在这里抽象的意义在于数据类型的数学抽象特性

    本质,最核心的是:数学,其余的非本质/非核心都会被忽略。

       讲解了数据类型和抽象数据类型相信大家很清楚了吧。

       下面我们开始讲解线性表的抽象数据类型。

       这里最核心的就是线性表啦,他们都是一对一的存在,在我们前面的基础学习当中,我们已经慢慢知道了抽象是什么。

       关于线性表抽象数据类型的定义如下所示,贴上代码code:

      这里用的是C写的线性表抽象数据类型定义和利用

    #include <studio.h>
    /*
     操作方法:
      InitList(*L):初始化操作,建立一个空的线性表
      ListEmpty(L):若线性表为空,返回True,否则返回False
      ClearList(*L):将线性表清空。
      GetElem(L,i,e):将线性表L中的第i个位置元素赋值给e
      LocateElem(L,e):在线性表L中查找与给定值e相等的元素,如果查找成功
      返回该元素在表中序号表示成功,否则,返回0表示失败
      ListInsert(*L,i,e):在线性表L中的i个位置插入新元素e
      ListDelete(*L,i,*e):删除线性表L中地i个位置元素,并用e返回其值
      ListLength(L):返回线性表L的元素个数
    */
    void union(List *La,List Lb)//union在这里只是个名字
    {
     int La_len,Lb_len,i;
     ElemType e;/*声明一个与La和Lb相同的数据元素e*/
     La_len=ListLength(La);//求线性表的长度
     Lb_len=ListLength(Lb);//求线性表的长度
     for(i=1;i<Lb_len;i++)//循环遍历Lb的长度
     {
       GetElem(Lb,i,e); //取出第i个数据元素把它赋值给e
       if(!LocateElem(La,e,equal))//如果La不存在和e相同的元素
           ListInsert(La,++La_len,e);//就向线性表的长度里面插入新元素e
     }
    }

     //为注释,我想注释部分讲解的很清楚,这段代码并不能正常运行。因为这只是算法的一个方法,而不是实际的代码编程,在这里和代码还是有点区别的。

  • 相关阅读:
    (9)ASP.NET Core2.2 中的MVC路由二
    (8)ASP.NET Core2.2 中的MVC路由一
    (7)ASP.NET Core2.2 中的错误处理
    (6)ASP.NET Core2.2 中使用IHttpClientFactory发出HTTP请求
    (5)ASP.NET Core2.2 中的静态文件
    (4)ASP.NET Core2.2 中间件
    蒲公英 &#183; JELLY技术周刊 Vol.05: Rust & Electron 的高性能实践 -- Finda
    Taro 2.2 全面插件化,支持拓展和定制个性化功能
    使用 Taro 快速开发京东小程序
    技术周刊 · 0202 年了,你还不学一下 WASM 么?
  • 原文地址:https://www.cnblogs.com/piaomiaohongchen/p/6395479.html
Copyright © 2011-2022 走看看