第十章·线性表运算术式·静态链表·其一

"在一些语言中没有指针类型,所以就不能实现链式术式,可以借助一维数组来实现,实际例子如下:

#define MAX 6 
typedef struct{
    int data;
    int cur;//游标
}stalink[MAX];

对于这种特殊的结构,在进行插入和删除的时候只需要修改游标即可。
图示举例如下:
//后补QWQ -1.9

"amazing",我感叹到,"那么下来是,注意以下三点:

初始化(创建)
 void initlist(stalink space){
    int i;
    for(i=0;i<MAX-1;i++){
        space[i].cur=i+1;
        space[MAX-1].data=0;
    }
}

其中,把space[0]当作头单元(结点,备用链表头结点)。

获取结点
int allocnode(stalink space){
    int i;
    i=space[0].cur;
    if(i==0)return 0;//备用链表空间已空,分配空间失败
    space[0].cur=space[i].cur;
    return 1;//分配成功
}

从备用链表上获取一个新的结点,如果备用链表为空,操作视为失败

回收结点
void freenode(stalink space,int i){
space[i].cur=space[0].cur;
space[0].cur=i;
}

对于此术式来说,将链表中删除的结点,插入到备用链表中的头结点之后

"emmm,可还行,先看完再请外援.jpg,下来是:

创建静态链表
int createstalink(stalink space,int n){
    int head,i,k,s;
    k=head=allocnode(space);
    for(i=1;i<=n;i++){
        s=allocnode(space);
        cin>>space[s].data;
        space[k].cur=s;
        k=s;
    }
    return head;
}
求表长
int getlength(stalink space,int head){
int i=0,k;
k=space[head].cur;
while (k!=0)
{
    i++;
    k=space[k].cur;
}
return i;
}

"中午了吗,先看到这里吧",我合上了书.

//写这篇的时间是-1.9
//图示之后会增加-1.9

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容