提到线性这个词,并不陌生,在 数据结构的基本概念 中学过线性的逻辑结构。线性逻辑结构是一对一关系,结点之间排成了一列或者一行,因此说线性表也是一种逻辑关系。有了对线性表的认知,那么来看一下它的概念:html
线性表是具备相同类型的 n (n>=0) 个元素的有限序列,其中 n 为表长,当 n=0 时,该表为空表。算法
为何要相同类型?计算机在处理大量数据的时候,把相同的数据元素称做为数据对象。每每要处理相同的数据元素,也就处理一种数据对象。不会把音频和图片杂糅到一块儿进行处理。也不会把抽象事物,好比说人和汽车组合到一块儿进行处理。由于这样没有意义,也没有高的效率。数据结构
对于相同类型,在接下来所学到的全部的数据结构中都有这样的要求。由于具备相同类型的数据结构,它在解决实际问题,实现算法时,才更加的有意义。其次,对于这个类型的范围,它的定义其实并不狭隘,并不只仅局限于咱们常见的类型,好比说整型、浮点型这样的类型。对于从实际生活中抽象出来的类型,好比说一本书、一我的也是能够做为一个元素的。它与 C++ 中的面向对象的类比较类似。code
除了相同类型,定义中还有一个比较重要的点,那就是是有限序列。什么是有限?就是说明该线性表的长度是有限的,由于计算机没法处理无限多的数据。第二个是序列,根据下面的表示方法能够发现,线性表中每个元素都是有序号的,序列的意思就是有序号的一种排列。这就是在线性表定义中比较重要的两个点。htm
若 L 命名为线性表,则通常表示为:对象
在 L 当中,线性表的每个元素都具备相同类型,都是属于同一个数据对象的数据元素,分别是 a1、a2 一直到 an 。能够发现,对于全部的元素它都是有序号的。blog
那么在表中,第一个元素,称它为表头元素,最后一个元素称它为表尾元素。除了这样,该线性表还有一些其余的逻辑关系。排序
在线性表中,每个元素除了表头元素,它都有一个前驱结点。也就是 ai+1 的前驱结点,便是 ai 。一样在表中,每个元素除了表尾元素,它都有一个后继结点。也就是 ai 的后继结点 ai+1 ,这就是线性表在定义上的全部知识点。根据定义,总结一下线性表的特色:图片
线性表的九种基本操做:内存
首先对于任何一种数据结构,都有一个建立它的方法,也有一个销毁它的方法。在线性表中建立它的方法叫作 InitList
,传入的参数是一个线性表,它的做用是初始化这个线性表,构造一个空的线性表。注意传入的参数是引用类型。第二个就是销毁的操做,叫 DestroyList
,传入的参数依旧是一个引用类型的线性表。它是销毁这个线性表,并释放线性表所占用的内存空间。注意针对不一样的存储结构而言,它们具体的实现方式可能有很是大的差别。
接下来有两种查找操做,一种是按值查找,另外一种是按位查找。首先是按值查找操做,它叫作 LocateElem
,Elem 指的是元素。传入的参数是线性表以及一个值 e 来表示,它的意思是在表 L 中查找具备给定关键字值的元素,也就是找到该表中值是 e 的元素。注意,每每查找的过程中,返回的值是第一个查找到的元素,也就是说假如在该表中有多个符合该值的元素,只返回查找的第一个。
接下来看按位查找,它叫 GetElem
,传入的参数依旧是线性表,可是第二个参数有所不一样,它是一个 i 。这个 i 表示获取表中第 i 个位置的元素。由于线性表每个元素都是有序号的,返回的就是序号是 i 的这个元素的值。还有一点须要注意的就是,按位查找这个输入的参数 i ,必定是在 0 到表长的大小之间,由于不可能找到比表长大的位置元素的值。
接下来看有关线性表插入和删除的操做。首先来看插入的操做,叫 ListInsert
,它的传入参数有三个,第一个是线性表的引用,这里传引用类型一样是为了达到实现更方便。第二个传入参数是 i ,也就是在第 i 个位置进行插入。第三个传入的参数是插入的元素 e 。要注意的一点就是在全部线性表的插入操做中,全部的插入都是前插,也就是第 i 个位置的前一个位置进行插入,这是一个小的规定。
接下来看删除操做。删除操做叫 ListDelete
,它传入的参数也是三种,第一个是线性表的引用,第二个表示要删除的第 i 个位置的元素,最后一个参数是值的引用,经过该引用返回该元素的值。插入与删除操做一样要注意,这个传入参数 i 必定也在表长范围以内,一旦超过表长,插入和删除操做都没有意义了。
而后看输出操做。输出操做很简单,就是按先后顺序输出线性表 L 的全部元素的值。
最后还有两个操做,一个是判空操做,判断该表是否为空表,如果空表则返回 TRUE,不然返回 FALSE。另外一个是求表长,求表长的意思就是返回线性表的长度,即 L 中数据元素的个数。
以上就是线性表的基本操做。