某些高階語言裡面並沒有指標,只有陣列,靜態鍊錶就是利用陣列來實現類似鍊錶的操作
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 提示鍊錶的狀態。...