数据结构之线性表的含义和线性表的抽象数据类型
我们知道,数据结构当中分为逻辑结构和物理结构。逻辑结构里面又分为好几个结构。其中有一个是线性结构。
线性结构中的数据元素之间是一对一的关系。线性表和这个很类似,也是一对一,像极了物理结构当中的顺序存储结构。
线性表的定义是这样的就是它的含义:零个或多个数据元素的有限序列。线性表(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
}
}
//为注释,我想注释部分讲解的很清楚,这段代码并不能正常运行。因为这只是算法的一个方法,而不是实际的代码编程,在这里和代码还是有点区别的。