读书人

希望知道静态链表的解释下哈 本人小弟

发布时间: 2012-03-28 15:40:03 作者: rapoo

希望知道静态链表的解释下哈 本人我不胜感激!
备用链表初始化:

void initial(StaticList space,int *av)

{

int k;

space[0],cursor=0;/*设置已用静态单连表的头指针指向位置0*/

for(k=0;k <Maxsize-1;k++) space[k].cursor=k+1;

space[Maxsize-1].cursor=0;/*连链*/

*av=1;/*设置备用链表头指针初值*/

}

为什么他把头指针*av初始化为1,使用中的链表的头指针不是为1吗,这样不会混缴吗?

还有就是关于取备用链表结点的算法

int getnode(StaticList space,int *av)

/*从备用链表摘下一个结点空间,分配给待插入静态连表中的元素*/

{ int i;

i=* av;

*av=space[*av].cur;

return i;

}

*av 是不是指取下的备用结点?那是不是从头开始取的?i是指什么? *av=space[*av].cur这句又是什么意思呢?


[解决办法]
*av是取静态数组的元素。而链表的特点仅为前后联系,数组是可以直接索引得。比如在进行添加、删除操作之后,链表的保存顺序就有可能与数组的不同,因此,space[x].cur取得是当前节点的一个与链表顺序有关的标识。
[解决办法]
静态链表是这样的,在一个数组中有两个原素是不用的分别是第0个和第1个,第0个用来指示备用空间的第一个元素的位子,第1个则用来指示第一个链表元素的位子,每当从链表中删除一个元素时.则让该元素成为备用链表的第一个结点,也即让数组的第0个元素指向删除的结点,然后让删除的结点指向原来的备用链表的第1个结点,插入的话类似

读书人网 >C语言

热点推荐