#include <stdio.h>
#define MAXSIZE 600
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int ElemType;
typedef struct{
ElemType data;
int cur;
} Component, StaticLinkList[MAXSIZE];
void initList(StaticLinkList L);
int listEmpty(StaticLinkList L);
void clearList(StaticLinkList L);
void getElem(StaticLinkList L, int i, int *e);
int locateElem(StaticLinkList L, int e);
int listInsert(StaticLinkList L, int i, int e);
int listDelete(StaticLinkList L, int i, int *e);
int listAdd(StaticLinkList L, int e);
int listLength(StaticLinkList L);
int printStaticLinkList(StaticLinkList L);
void initList(StaticLinkList L)
{
for (int i = 0; i < MAXSIZE - 1; i++)
{
L[i].cur = i + 1;
}
L[MAXSIZE - 1].cur = 0;
}
int listAdd(StaticLinkList L, int e)
{
int index = MAXSIZE - 1;
L[L[0].cur].data = e;
if (L[MAXSIZE - 1].cur == 0)
{
L[MAXSIZE - 1].cur = L[0].cur;
}
else
{
while (L[index].cur)
{
index = L[index].cur;
}
L[index].cur = L[0].cur;
}
L[L[0].cur].cur = 0;
L[0].cur++;
}
int printStaticLinkList(StaticLinkList L)
{
int i = L[MAXSIZE - 1].cur;
while (i)
{
printf("[%d]: %d\n", i, L[i].data);
i = L[i].cur;
}
}
int listInsert(StaticLinkList L, int i, int e)
{
int j = 1;
int index = MAXSIZE - 1;
int index_cache = L[L[0].cur].cur;
while (j < i && index)
{
index = L[index].cur;
++j;
}
if (!index || i < 1)
{
return ERROR;
}
L[L[0].cur].data = e;
L[L[0].cur].cur = L[index].cur;
L[index].cur = L[0].cur;
L[0].cur = index_cache;
return OK;
}
int listDelete(StaticLinkList L, int i, int *e)
{
int j = 1;
int index = MAXSIZE - 1;
while (j < i && index)
{
index = L[index].cur;
++j;
}
if (!index || i < 1)
{
return ERROR;
}
int index_cache = L[index].cur;
*e = L[L[index].cur].data;
L[0].cur = L[index].cur;
L[index].cur = L[L[index].cur].cur;
L[index_cache].cur = L[L[0].cur].cur;
return OK;
}
int main(void)
{
StaticLinkList list;
int e;
initList(list);
listAdd(list, 233);
listAdd(list, 666);
listAdd(list, 123);
listAdd(list, 456);
listAdd(list, 789);
listAdd(list, 100);
printf("%d\n", listInsert(list, 3, 888));
listDelete(list, 2, &e);
printf("删除了%d\n", e);
listAdd(list, 101);
printStaticLinkList(list);
return 0;
}