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