靜態鍊錶的理解及基本操作

2021-09-23 17:10:45 字數 3373 閱讀 5639

某些高階語言裡面並沒有指標,只有陣列,靜態鍊錶就是利用陣列來實現類似鍊錶的操作

1.要分配足夠大的記憶體,用來存放變數,記憶體大小記為maxsize;

2.記憶體不僅要存放資料,而且要存放' 指標 ',把它稱為游標,滿足這一條件的變數型別是結構體,其定義如下:

typedef structcomponent,staticlinklist[maxsize];//staticlinklist可以用來定義結構體陣列;
3.接下來需要對靜態鍊錶進行初始化,使它成為乙個真正的『 鍊錶 』;

(1)' 鍊錶 』需要乙個頭結點,將陣列最後乙個元素作為頭結點,它不儲存資料,但是它的游標要等於鍊錶第乙個有值元素的下           標,沒有元素則設為0;

(2)陣列第乙個元素的游標要存放備用來鍊錶首結點的下標;

(3)除最後乙個元素和倒數第二個元素外,更新所有元素的游標值,**如下:

status initlist(staticlinklist l)

l[maxsize-2].cur = 0; //判斷備用鍊錶是否為空

l[maxsize-1].cur = 0; //它存放首元素的下標,現在鍊錶為空,設定為0

return ok;

}

1.首先得判斷 i 的值是不是合理的,它不能小於1,也不能大於加 1 的鍊錶長度;

2.因為要把待插入的值儲存到備用鍊錶的首結點,因此需要得到該首結點的下標,還要更新首結點;

3.把這些操作放到乙個函式裡,既然要獲取首結點的下標,首先得判斷備用鍊錶還存不存在,**如下:

//返回備用鍊錶首結點的下標,若備用鍊錶為空,則返回0

int molloc_l(staticlinklist l)

return i;

}

4.現在已經得到了備用鍊錶首結點的下標(假設存在),從頭結點(最後乙個元素)開始,遍歷到第i-1個元素,然後把資料儲存到備用鍊錶的首結點,該節點的不再是首結點,令它的游標賦值為第i個元素的下標,同時第i-1個元素的游標賦值為該節點的下標,**如下:

status insertlist(staticlinklist l,int i,elemtype e)

printf("備用鍊錶為空!\n");

return error; //備用鍊錶為空

}

5.元素插入**,並且說明為什麼倒數第二個元素的游標要設定為0

1.有了插入的思想,刪除就比較好理解了,同樣首先判斷 i 的位置是否合理;

2.如果合理,那麼也是從頭結點遍歷到第 i-1 個元素,讓它的游標賦值為第i個元素的游標,相當於直接跳過第i個元素;

3.銷毀第i個元素,並讓它成為備用鍊錶的首結點,具體**如下:

status deletelist(staticlinklist l,int i)

void free_l(staticlinklist l,int j)

1.從頭結點開始遍歷,遍歷到最後乙個有值元素,它的標誌是游標為0;

int    listlength(staticlinklist l)

return j;

}

/*

專案名稱:靜態鍊錶基本操作

編譯環境:vc++ 2008速成版

作者相關:。。。

最後修改:2019.5.24

學習目標:1.理解靜態鍊錶的基本操作

注意事項:1.靜態鍊錶往往適應於沒有指標的高階語言

*/#include #define maxsize 5

#define error 0

#define ok 1

typedef bool status;

typedef int elemtype;

typedef structcomponent,staticlinklist[maxsize];//component為結構體資料型別的別名,用來定義結構體變數;

//staticlinklist為結構體陣列型別的別名,用來定義結構體陣列

status visit(elemtype c);

status initlist(staticlinklist l);

int molloc_l(staticlinklist l);

status insertlist(staticlinklist l,int i,elemtype e);

status deletelist(staticlinklist l,int i);

void free_l(staticlinklist l,int j);

int listlength(staticlinklist l);

void outlist(staticlinklist l);

int main()

outlist(l);

deletelist(l,2);

outlist(l);

printf("鍊錶的長度為:%d\n",listlength(l));

return 0;

}status initlist(staticlinklist l)

l[maxsize-2].cur = 0; //判斷備用鍊錶是否為空

l[maxsize-1].cur = 0; //它存放首元素的下標,現在鍊錶為空,設定為0

return ok;

}//返回備用鍊錶首結點的下標,若備用鍊錶為空,則返回0

int molloc_l(staticlinklist l)

return i;

}status insertlist(staticlinklist l,int i,elemtype e)

printf("備用鍊錶為空!\n");

return error; //備用鍊錶為空

靜態鍊錶的基本操作

靜態鍊錶的基本操作包括建立與輸出,刪除與插入操作與單鏈表類似,麻煩的點在於每次遍歷都要建立兩個臨時變數,還要特殊判斷第乙個節點,並將刪除後的節點再次初始化其游標的值,就不寫了 include include typedef struct node node define maxsize 1000 t...

靜態鍊錶的基本操作

上節,我們初步建立了乙個靜態鍊錶,本節學習有關靜態鍊錶的一些基本操作,包括對錶中資料元素的新增 刪除 查詢和更改。本節是建立在已能成功建立靜態鍊錶的基礎上,因此我們繼續使用上節中已建立好的靜態鍊錶學習本節內容,建立好的靜態鍊錶如圖 1 所示 圖 1 建立好的靜態鍊錶 例如,在圖 1 的基礎,將元素 ...

靜態鍊錶的建立以及基本操作

include include define max 100 typedef int elemtype 定義每個節點的資料資訊 typedef struct node slnode 靜態鍊錶的定義 typedef struct static list sqlist int main 提示鍊錶的狀態。...