定义
用游标实现法描述的链表叫做静态链表
C定义:
#define MAX_SIZE 1000
typedef struct
{
ElemType data;
int cur;
}Component,StaticLinkList[MAX_SIZE];
插入和删除操作
一些相关方法:
//初始化
int initList(StaticLinkList space)
{
int i;
for (i = 0; i < MAX_SIZE - 1; i++) {
space[i].cur = i + 1;
}
space[MAX_SIZE].cur = 0;
return OK;
}
//初始化结点时 找到空余处的位置
int Malloc_SLL(StaticLinkList space)
{
int i = space[0].cur;
if (space[0].cur) {
space[0].cur = space[i].cur;
}
return i;
}
//收回空闲结点
void Free_SLL(StaticLinkList space, int k)
{
space[k].cur = space[0].cur;
space[0].cur = k;
}
//返回L中元素个数
int ListLength(StaticLinkList L)
{
int j = 0;
int i = L[MAX_SIZE - 1].cur;
while (i) {
i = L[i].cur;
j++;
}
return j;
}
插入操作
int insertList(StaticLinkList L,int i,ElemType e)
{
if (i < 1 || i > ListLength(L) + 1) {
return ERROR;
}
int j = Malloc_SLL(L);
int l, k;
k = MAX_SIZE - 1;
if (j) {
L[j].data = e;
for (l = 1; l < i; l++) {
k = L[k].cur;
}
L[j].cur = L[k].cur;
L[k].cur = j;
return OK;
}
return ERROR;
}
删除操作
//删除数据
int deleteList(StaticLinkList L,int i)
{
if (i < 1 || i > ListLength(L)) {
return ERROR;
}
int k = MAX_SIZE - 1;
int j;
for (j = 1; j < i; j++) {
k = L[k].cur;
}
j = L[k].cur;
L[k].cur = L[j].cur;
Free_SLL(L, j);
return OK;
}