一、静态链表特征
1、静态链表是一种用数组来存储的链表,由两个数据域组成。data域放数据元素,cur域放后继元素的下标。
2、优点:在插入和删除操作时只需要修改游标,不需要移动元素。
3、缺点:没有解决连续存储分配带来的表长难以确定的问题,失去了顺序存储结构随机存取的特性。
二、静态链表相关算法
typedef struct
{
int data;
int cur;
} Component,Linklist[maxsize];
1.1静态链表的初始化
int InitList(Linklist space)
{
int i;
for(i=0; i<maxsize-1; i++)
{
space[i].cur=i+1;//0-998号下标从1-999
}
space[maxsize-1].cur=0;//第999号存储第一有值元素的下标
return 1;
}
1.2静态链表的长度
int ListLength(LinkList L)
{
int length;
i=L[maxsize-1].cur;//获得第一有值元素下标
while(i)
{
i=L[i].cur;//遍历元素,最后一个有值元素的下标为0;
length++;
}
return length;
}
1.2静态链表的插入
/*相当于malloc函数*/
int Malloc_E(Linklist space)
{
int i;
i=space[0].cur;//备用链表第一个节点的下标
if(space[0].cur)
space[0].cur=space[i].cur;//更改备用链表第一节点下标
return i;//返回插入位置下标
}
/*在某个指定的位置插入元素*/
int InsertElem(Linklist L,int i,int e)
{
int k,j,p;
k=maxsize-1;//k首先是最后一位元素的下标
if(i<1 ||i>ListLength(L)+1)//不在插入范围内
return 0;
j=Malloc_E(L);//获得备用链表的第一个分量
if(j)
{
L[j].data=e;//赋值
for(p=0; p<=i-1; p++)
k=L[k].cur;//寻找第i-1个位置的元素的下标
L[j].cur=L[k].cur;//将新分量的下标和第i-1个位置的元素互换下标
L[k].cur=j;
return 1;
}
return 0;
}
1.3静态链表的删除
/*相当于free函数*/
int Free()_E(Linklist space,int k)
{
//其实就是space[0].cur和要删除元素的cur做交换
//让刚刚删除的元素位置作为第一优先空位
space[k].cur=space[0].cur;//把要删除的元素收进备用链表
space[0].cur=k;//把备用链表第一节点的位置给要删除的元素
}