数据结构之线性表的含义和线性表的抽象数据类型

 

 

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

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

   线性表的定义是这样的就是它的含义:零个或多个数据元素的有限序列。线性表(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
 }
}

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

 

posted @ 2017-02-13 21:37  飘渺红尘✨  阅读(2909)  评论(0编辑  收藏  举报
Title