所谓的数组模拟链表,其实是模拟指针域和数据域。

#define Maxsize 100
typedef struct
{
int data;
int cur;
}StaticLinkList[Maxsize];

1.初始化数组

void InitLinkList(StaticLinkList L)
{
for(int i=0;i<Maxsize-1;i++)
L[i].cur=i+1;
L[Maxsize-1].cur=0;
}

用数组模拟单链表_#define

类似于这样,但是如果插入元素,就是下面这个情况

用数组模拟单链表_数组_02

这个最后元素的cur是0,而备用链表的cur是5.

space[0].cur=space[n-1].cur;//n表示含有多少个元素
space[n-1].cur=0;

2.插入操作

int Malloc_SSL(StaticLinkList L)
{
int i=space[0].cur;
if(space[0].cur)
space[0].cur=space[i].cur;
return i;
}
void InsertList(StaticLinkList L,int i,int e)
{
int j,k,l;
k=Maxsize-1;
j=Malloc_SSL(L);
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;
}

3.删除操作

void Free_SSL(StaticLinkList L,int k)
{
space[k].cur=space[0].cur;
space[0].cur=k;
}
void ListDelete(StaticLinkList L,int i)
{
int j,k;
k=Maxsize-1;
for(j=1;j<i;j++)
k=L[k].cur;
j=L[k].cur;
L[k].cur=L[j].cur;
Free_SSL(L,j);
}