线性表:零个或多个数据元素的有限序列。
第一个元素为a1a1,每个元素的的所占长度为cc,第个元素aiai的地址: Loc(ai)=Loc(ai)+(i−1)∗cLoc(ai)=Loc(ai)+(i−1)∗c,可通过地址获取相应元素,所以任意元素的读取时间复杂度为O(1)O(1)。
线性表的两种存储结构 【顺序存储】【链式存储】
【顺序存储】指的是用一段地址连续的存储单元依次存储线性表的数据单元。
由于数据表的元素类型相同,可以用以一维数组来实现顺序存储结构。
用数组来实现线性表,数组的长度(length,表示存储空间的长度)和线性表的长度(size,线性表的数据元素个数)注意区分。
插入操作:
①插入位置不合理,抛出异常;
②插入使线性表的长度大于数组长度,要么抛出异常要么动态增加容量;
③从最后一个元素开始,遍历到第ii个位置,分别将它们往后移一个元素位置;
④将要插入的元素赋值给第个位置;
⑤表长加1。删除操作:
①删除位置不合理,抛出异常;
②取出删除的元素;
③从删除位置开始遍历到最后一个位置,分别将它们往前移一个元素位置;
④表长减1。
【顺序存储结构的优缺点】
advantages:
①无须为表示表中元素之间的逻辑关系增加额外的存储空间;
②存取时间复杂度为O(1)O(1),存取速度快;
disadvantages:
①插入删除移动大量元素;
②线性表长度变化较大时,难以确定存储容量;
③由于线性表的长度一般小于存储数组的长度,且又是开辟内存的连续空间,可能造成存储的“碎片”;
【链式存储】指在计算机中用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的).。
【单链表】【静态链表】【循环链表】【双向链表】
【单链表】除了存储每个元素数据还要存储与后继元素的逻辑关系(直接后继元素的位置),把存储数据元素信息域称为数据域,把存储直接后继位置的域称为指针域,这两部分信息组成的数据元素aiai的存储映像,称为结点 ,nn个结点链接成一个链表,即为线性表的链式存储结构,每个结点只包含一个指针域,故叫做单链表。
链表中第一个结点的存储位置叫做头指针。
有时会在第一个结点前附设一个结点,称为头结点,其数据域为空,指针域存储第一个结点位置。