靜態鏈表
靜態鏈表:用數組描述的鏈表,描述方式叫做遊標實現法
線性表的靜態鏈表存儲結構
#define MAXSIZE 1000
typedef struct
{
Elemtype data;//數據
int cur;//遊標
}Component,StaticLinkList[MAXSIZE];
注最後一個元素的遊標應該是0
靜態鏈表初始化
Status InitList(StaticLinkList space)
{
int i;
for(i =0;i<MAXSIZE-1;i++)
space[i].cur = i+1;
space[MAXSIZE-1].cur=0;
return OK;
}
插入數據,如在上圖中插入B
首先獲得空閒分量的下標
int Malloc_SLL(StaticLinkList space)
{
int i = space[0].cur;
if(space[0].cur)//如果是空鏈表
space[0].cur = space[i].cur;//作爲一個分量備用
return i;
}
示例代碼
status ListInsert(staticLinkList L,int i,Elemtype e)
{
int j,k,l;
k = MAX_SIZE -1;
if(i<1 || i>ListLength(L)+1)
{
return ERROR;
}
j = Malloc_SLL(L);//調用上面寫的函數,
if(j)
{
L[j].data = e;
for(l=1;l<=i-1;l++)
{
k = L[k].cur;
}
L[j].cur = L[k].cur;
L[k].cur = j;
return OK;
}
return ERROR;
}
刪除操作
示例代碼
status ListInsert(staticLinkList L,int i)
{
int j,k;
k = MAX_SIZE -1;
if(i<1 || i>ListLength(L))
{
return ERROR;
}
j = Malloc_SLL(L);//調用上面寫的函數,
for(j=1;j<=i-1;j++)
{
k = L[k].cur;
}
j = L[k].cur;
L[k].cur = L[j].cur;
return OK;
}