StaticLinkList.h
/*线性表的静态链表存储结构*/
#define MAXSIZE 1000/*假设链表的最大长度是1000*/
#define OK 1
#define ERROR 0
typedef int Status;
typedef int ElemType;
typedef struct
{
ElemType data;
int cur;/*游标(cursor),为0时表示无指向*/
}Component, StaticLinkList[MAXSIZE];
Status InitLink(StaticLinkList L);/*初始化静态链表*/
Status CreatLink(StaticLinkList L, int n);/*构建静态链表*/
void PrintLink(StaticLinkList L);/*打印静态链表*/
int LengthLink(StaticLinkList L);/*返回静态链表长度*/
int Malloc_SLL(StaticLinkList L);/*申请结点*/
Status InsertLink(StaticLinkList L, int i, ElemType e);/*插入结点*/
Status Free_SLL(StaticLinkList L, int k);/*回收结点*/
Status DeleteLink(StaticLinkList L, int i);/*删除结点*/
StaticLinkList.c
Status InitLink(StaticLinkList L)
{
int i;
for(i=0; i<MAXSIZE-1; i++)
{
L[i].cur = i+1;
}
L[MAXSIZE-1].cur = 0;
return OK;
}
Status CreatLink(StaticLinkList L, int n)
{
int i;
InitLink(L);
L[MAXSIZE-1].cur = 1;
for(i=L[MAXSIZE-1].cur; i<=n; i++)
{
L[i].data = i+1;
}
L[0].cur = L[n].cur;
L[n].cur = 0;
return OK;
}
int LengthLink(StaticLinkList L)
{
int i, len = 0;
i = L[MAXSIZE-1].cur;
while(i)
{
len++;
i = L[i].cur;
}
return len;
}
int Malloc_SLL(StaticLinkList L)
{
int i = 0;
i = L[0].cur;
if(i)
{
L[0].cur = L[i].cur;
return i;
}
}
Status InsertLink(StaticLinkList L, int i, ElemType e)
{
int j, l, k;
if(i<1 || i>LengthLink(L)+1)
{
return ERROR;
}
j = Malloc_SLL(L);
L[j].data = e;
//k = L[MAXSIZE-1].cur;
k = MAXSIZE-1;
for(l=1; l<=i-1; l++)
{
k = L[k].cur;
}
L[j].cur = L[k].cur;
L[k].cur = j;
return OK;
}
Status Free_SLL(StaticLinkList L, int k)
{
L[k].cur = L[0].cur;
L[0].cur = k;
return OK;
}
Status DeleteLink(StaticLinkList L, int i)
{
int l, k;
if(i<1 || i>LengthLink(L))
{
return ERROR;
}
//k = L[MAXSIZE-1].cur;
k = MAXSIZE-1;
for(l=1; l<=i-1; l++)
{
k = L[k].cur;
}
//j = L[k].cur;
l = L[k].cur;
L[k].cur = L[i].cur;
Free_SLL(L, l);
return OK;
}
void PrintLink(StaticLinkList L)
{
int i = 0;
i = L[MAXSIZE-1].cur;
while(i)
{
printf("%d ", L[i].data);
i = L[i].cur;
}
printf("\n");
}