第七篇:静态链表的游标实现

本文介绍了如何在没有指针的高级语言中使用游标实现静态链表。静态链表通过结构数组作为备用结点空间,每个结点包含数据域和游标域,游标指示其后继结点在数组中的位置。文章讨论了插入、删除操作,并提出了回收已删除空间的方法,以避免静态链表的假满问题。此外,还给出了静态链表的基本操作算法,如查找、初始化、分配和回收结点。
摘要由CSDN通过智能技术生成

以前学习的各种链表都是由指针实现的,链表中结点的分配和回收(即释放)都是由系统提供的标准函数mallocfree动态实现的,故称之为动态链表。但是有的高级语言,如BASICFORTRAN等,没有提供指针这种数据类型,此时若想采用链表做存储结构,就必须使用游标来模拟指针,由程序员自己编写分配结点回收结点的过程。

    用游标实现链表,其方法是:定义一个较大的结构数组作为备用结点空间(即存储池)。当申请结点时,每个结点应含有两个域:data域和cursor域。data域用来存放结点的数据信息,需注意的是,此时的cursor域不在是指针而是游标指示器,游标指示器指示其后继结点在结构数组中的相对位置(即数组下标)。数组的第0个分量可以设计成表的头结点,头结点的next域指示了表中第一个结点的位置。表中当前最后一个结点的域为0,表示静态单链表的结束。我们把这种用游标指示器实现的单链表叫做静态单链表,static linked list。静态单链表同样可以借助一维数组来描述:

#define Maxsize = 链表可能达到的最大长度

typedef struct

{

    ElemType data;

    int cursor;

}Component, StaticList[Maxsize];

假如有如上的静态链表S中存储这线性表(abcdefghi),Maxsize=11,如图所示,要在第四个元素后插入元素e,方法是:先在当前表尾加入一个元素e,即:S[9].data = e;然后修改第四个元素的游标域,将e插入到链表中,即:S[9].cursor = S[4].cursor; S[4].cursor = 9;,接着,若要删除第8个元素h,则先顺着游标链通过计数找到第7个元素存储位置6,删除的具体做法是令S[6].cursor = S[7].cursor

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值