希望知道静态链表的解释下哈 本人我不胜感激!
备用链表初始化:
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个结点,插入的话类似