第三章 线性表---链式存储结构(静态链表)

用数组描述的链表叫作静态链表(也叫游标实现法)算法

 
数组的元素由两个数据域组成,data和cur,也就是说,数组的每一个下标都对应一个data和一个cur,数据域data,用来存放数据元素,游标cur至关于单链表中的next指针,存放该元素的后继在数组中的下标
 
第三章 线性表---链式存储结构(静态链表) - 影魔 - 影魔的博客
第三章 线性表---链式存储结构(静态链表) - 影魔 - 影魔的博客
 
咱们对数组的第一个和最后一个元素做为特殊元素处理,不存数据。咱们一般把未被使用的数组元素称为备用链表,而数组第一个元素,即下标为0的元素的cur就存放备用链表的第一个结点的下标,而数组的最后一个元素的cur则存放第一个有数值的元素的下标,至关于单链表中的头结点的做用,当整个链表为空时,则为02。
 
第三章 线性表---链式存储结构(静态链表) - 影魔 - 影魔的博客
 
实例演示:
 
第三章 线性表---链式存储结构(静态链表) - 影魔 - 影魔的博客
     
上图中,在乙和丁之间插入丙。 

第三章 线性表---链式存储结构(静态链表) - 影魔 - 影魔的博客


         (1) 动态链表中,结点的申请使用的是malloc()函数。在静态链表中,操做的是数组,所以必须本身实现这样的函数,用来作插入操做。  

        解决办法:将全部未被使用过的及已被删除的份量用游标链成一个备用链表。每当插入时,从备用链表上取得第一个结点做为待插入的新结点。 

第三章 线性表---链式存储结构(静态链表) - 影魔 - 影魔的博客

第三章 线性表---链式存储结构(静态链表) - 影魔 - 影魔的博客



         (2)插入的算法以下: 

第三章 线性表---链式存储结构(静态链表) - 影魔 - 影魔的博客 
第三章 线性表---链式存储结构(静态链表) - 影魔 - 影魔的博客 



3、删除 

         例子:上图中,删除甲。 

第三章 线性表---链式存储结构(静态链表) - 影魔 - 影魔的博客


         (1)动态链表中,结点的申请使用的是free()函数。在静态链表中,操做的是数组,所以必须本身实现这样的函数,用来作删除操做。 

第三章 线性表---链式存储结构(静态链表) - 影魔 - 影魔的博客 
第三章 线性表---链式存储结构(静态链表) - 影魔 - 影魔的博客 

        其中,j=L[999].cur=1, L[k].cur=L[j].cur,即:L[999].cur=L[1].cur=2。意思是:甲已删除,如今乙是第一个元素。 

        代码中的:Free_SSL(L,j);以下。 

第三章 线性表---链式存储结构(静态链表) - 影魔 - 影魔的博客


        代码中,space[1].cur=space[0].cur=8,意思是:把8给“甲”所在下标为1的份量的cur。space[0].cur=k=1,意思是:让删除的位置成为第一个优先空位,把它存入第一个元素(下标为0)处的cur中。 

第三章 线性表---链式存储结构(静态链表) - 影魔 - 影魔的博客
 
 
静态链表的优缺点
优势:
# 在插入和删除操做时,只须要修改游标,不须要移动元素,从而改进了顺序存储结构中的插入和删除操做须要移动大量元素的缺点
缺点:
# 没有解决连续存储分配带来的表长难以肯定的问题
# 失去了顺序存储结构随机存取的特性