1. 程式人生 > >用陣列組成的連結串列--靜態連結串列

用陣列組成的連結串列--靜態連結串列


  C語言有指標,可以按照上次那個方法做一下,但JAVA,C#,Basic呢?怎麼辦?前輩們真是聰明,用陣列描述指標。這個陣列由兩部分組成,一個位DATA域,一個位CUR指標域

線性表的靜態連結串列儲存結構

typedef struct 
{
    ElemType data;
    int cur;  /* 遊標(Cursor) ,為0時表示無指向 */
} Component,StaticLinkList[MAXSIZE];

靜態連結串列的插入

/*  在L中第i個元素之前插入新的資料元素e   */
Status ListInsert(StaticLinkList L, int i, ElemType e)   
{  
    int j, k, l;   
    k = MAXSIZE - 1;   /* 注意k首先是最後一個元素的下標 */
    if (i < 1 || i > ListLength(L) + 1)   
        return ERROR;   
    j = Malloc_SSL(L);   /* 獲得空閒分量的下標 */
    if (j)   
    {   
		L[j].data = e;   /* 將資料賦值給此分量的data */
		for(l = 1; l <= i - 1; l++)   /* 找到第i個元素之前的位置 */
		   k = L[k].cur;           
		L[j].cur = L[k].cur;    /* 把第i個元素之前的cur賦值給新元素的cur */
		L[k].cur = j;           /* 把新元素的下標賦值給第i個元素之前元素的ur */
		return OK;   
    }   
    return ERROR;   
}

靜態連結串列的元素刪除

/*  刪除在L中第i個數據元素   */
Status ListDelete(StaticLinkList L, int i)   
{ 
    int j, k;   
    if (i < 1 || i > ListLength(L))   
        return ERROR;   
    k = MAXSIZE - 1;   
    for (j = 1; j <= i - 1; j++)   
        k = L[k].cur;   
    j = L[k].cur;   
    L[k].cur = L[j].cur;   
    Free_SSL(L, j);   
    return OK;   
}