數據結構和算法-學習筆記7

靜態鏈表

靜態鏈表:用數組描述的鏈表,描述方式叫做遊標實現法

線性表的靜態鏈表存儲結構

#define MAXSIZE 1000

typedef struct

{

    Elemtype data;//數據

    int cur;//遊標

}Component,StaticLinkList[MAXSIZE];

wKioL1STft6jGONxAADH0V1kVIU083.jpg

注最後一個元素的遊標應該是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

wKiom1STfa-hCmmFAAFa-SaBzE8328.jpg

首先獲得空閒分量的下標

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;

}

刪除操作

wKioL1STg1TTn7fqAAHvw03C2fQ503.jpg

示例代碼

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;

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章