用游标实现链表,其方法是:定义一个较大的结构数组作为备用结点空间(即存储池)。当申请结点时,每个结点应含有两个域:data域和cursor域。data域用来存放结点的数据信息,需注意的是,此时的cursor域不在是指针而是游标指示器,游标指示器指示其后继结点在结构数组中的相对位置(即数组下标)。数组的第0个分量可以设计成表的头结点,头结点的next域指示了表中第一个结点的位置。表中当前最后一个结点的域为0,表示静态单链表的结束。我们把这种用游标指示器实现的单链表叫做静态单链表,static linked list。静态单链表同样可以借助一维数组来描述:
#define Maxsize = 链表可能达到的最大长度
typedef struct
{
ElemType data
int cursor
}Component, StaticList[Maxsize]
假如有如上的静态链表S中存储这线性表(a,b,c,d,e,f,g,h,i),Maxsize=11,如图所示,要在第四个元素后插入元素e,方法是:先在当前表尾加入一个元素e,即:S[9].data = e然后修改第四个元素的游标域,将e插入到链表中,即:S[9].cursor = S[4].cursorS[4].cursor = 9,接着,若要删除第8个元素h,则先顺着游标链通过计数找到第7个元素存储位置6,删除的具体做法是令S[6].cursor = S[7].cursor。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zzhangjiej/archive/2008/09/04/2880675.aspx
静态链表这种存储结构,仍需要预先分配一个较大的空间,但在作为线性表的插入和删除 *** 作时不需移动元素,仅需修改指针,故仍具有链式存储结构的主要优点。
假如有如上的静态链表S中存储着线性表(a,b,c,d,f,g,h,i),Maxsize=11,如图所示,要在第四个元素后插入元素e,方法是:先在当前表尾加入一个元素e,即:S[9].data = e;然后修改第四个元素的游标域,将e插入到链表中,即:S[9].cursor = S[4].cursor;S[4].cursor = 9,接着,若要删除第7个元素h,则先顺着游标链通过计数找到第7个元素存储位置6,删除的具体做法是令S[6].cursor = S[7].cursor。
扩展资料:
静态链表中,除了数据本身通过游标组成链表外,还需要有一条连接各个空闲位置的链表,称为备用链表。
作用:回收数组中未使用或者之前使用过(现在不用)的存储空间,留待后期使用。即静态链表使用数组申请的物理空间中,存在两个链表,一条连接数据,另一条连接数组中为使用的空间。
注:通常备用链表的表头位于数组下标为0(a[0])的位置,而数据链表的表头位于数组下标为1(a[1])的位置。
参考资料来源:
百度百科-静态链表
静态链表就是用数组来模拟链表,有些编程语言(如VB)没有指针,就可以用静态链表来模拟链表的 *** 作;静态链表结构体定义一般如下:typedef struct{
ElemTypedata
int cursor
}Compoment,StaticList[MAXSIZE]
连链:从语句(space[k].cursor=k+1 /*连链*/)的注释就可以看出,指的是把各个结点按链表的形式链接起来,cursor相当于链表中的next指针。初始化时,头结点的指针(域)指向第一个结点,第一个结点指针(域)指向第二个结点,。。。依次类推;最后一个指针(域)为0,可以理解为空NULL。
程序段的注释比较清楚,第一个是初始化静态链表,第二个算法
int getnode(StaticList space, int *av)
/*从备用链表摘下一个结点空间,分配给待插入静态链表中的元素*/
{
int i
i=*av
*av=space[*av].cursor//修改备用链表头指针的值,以便下一次获取
return i
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)