数据结构与算法--线性表系列(静态链表)

hello,everybody.今天我们一起来学习,线性表的静态链表。C语言的指针变量,使我们可以操作内存的地址。但是,一些其他没有指针变量的设计语言,就没办法对内存进行操作。那我们上堂课的单链表,在这些没有指针的编程语言中,就无法实现了。这时候,静态链表就出生了。

静态链表:用数组描述的链表叫做静态链表。

静态链表是为了,使那些没有指针的设计语言实现单链表能力的方法。它的思路是这样的,创建一个数组。使每个数组元素具有两个数据域,一个存放data,一个存放cur.cur,相当于单链表中的next。

静态链表的结构代码:

#define MAXSIZE 1000 /*假设链表的最大长度是1000*/

typedef struct
{
    ElemType data;
    int cur;/*游标(Cursor),为0时表示无指向*/
}Component,StaticLinkList[MAXSIZE];

 

我们把未被使用的数组元素称为备用链表,数组下标为0的数据元素,不存数据,它的cur存放的是备用链表的第一个结点的下标。

而数组的最后一个下标的Cur存放的是第一个有数值的
元素下标,相当于单链表中的头结点作用。
   image

这张图,是一个空的静态链表。首先,第一个数组元素,data域不存数据。cur存放的是备用链表中的第一个未被使用分量的下标。因为是空表,所以下标为1的分量就是第一个未被使用的分量。再看最后一个数据元素,data域也是不存数据。cur存放的是第一个有值的数据元素的下标。相当于头结点。

 

image

这幅图,是初始化静态表的算法。

静态链表的插入与删除:

实现静态链表的插入与删除,需要我们实现生成结点,回收结点算法。下面是对应算法的截图:

image

生成结点的算法。

image

回收结点的算法.

我们看一下插入算法:
image

 

删除的算法:

image

删除的算法。

 

静态链表的优缺点:
优点:
在插入、删除操作时,只需要修改游标,不需要移动元素,从而改进了
在顺序存储结构中的插入和删除操作需要移动大量的元素的缺点。
缺点:
没有解决连续分配带来的表长难以确定的问题
失去了顺序存储随机存取的特性

posted @ 2014-06-04 16:48  VitoCorleone  阅读(887)  评论(0编辑  收藏  举报