靜態(tài)鏈表定義
#define Error -1
#define OK 1
#define MaxSize 100
typedef int Status;
typedef int ElementType;
typedef struct {
int cur;
ElementType data;
}Compnent,StaticLinkList[MaxSize];
靜態(tài)鏈表的增刪
//數(shù)組的第一個元素码邻,即下標(biāo)為0的那個元素的cur就存放備用鏈表的第一個結(jié)點(diǎn)的下標(biāo)
//數(shù)組的最后一個元素,即下標(biāo)為MAXSIZE-1的cur則存放第一個有數(shù)值的元素的下
Status initStaticLinkList(StaticLinkList list){
for (int i = 0; i < MaxSize-1; i++) {
list[i].cur = i+1;
}
list[MaxSize-1].cur = 0;
return OK;
}
//空閑的下標(biāo)
int malloc_SLL(StaticLinkList list){
int cur = list[0].cur;
if (cur) {
list[0].cur = list[cur].cur;
}
return cur;
}
//獲得長度
int ListLength(StaticLinkList list){
int k = list[MaxSize-1].cur;
int j = 0;
while (k) {
k = list[k].cur;
j++;
}
return j;
}
//插入
Status staticListInsert(StaticLinkList L, int i, ElementType e){
if (i <1 || i > ListLength(L)+1 || i > MaxSize-2) {
return errno;
}
//tag是要i的前一個元素的下標(biāo)值
int tag = MaxSize-1;
int cur = malloc_SLL(L);
if (cur) {
for (int j = 1; j < i ; j++) {
tag = L[tag].cur;
}
L[cur].data = e;
L[cur].cur = L[tag].cur;
L[tag].cur = cur;
}
return OK;
}
//刪除
Status staticListDelete(StaticLinkList L, int i){
if (i < 1 || i > ListLength(L)) {
return errno;
}
int tag = MaxSize-1;
//找到要刪除的節(jié)點(diǎn)的前一個節(jié)點(diǎn)的下標(biāo)
for (int j = 1; j < i ; j++) {
tag = L[tag].cur;
}
// 將刪除的節(jié)點(diǎn)的前 一個節(jié)點(diǎn)的下標(biāo)指向后一個節(jié)點(diǎn)的下標(biāo)
int k = L[tag].cur;
L[tag].cur = L[k].cur;
//將被刪除的節(jié)點(diǎn)添加到備用鏈表
StaticListFree_SLL(L, k);
return OK;
}
// 將下標(biāo)為K的空閑節(jié)點(diǎn)回收到備用鏈表
void StaticListFree_SLL(StaticLinkList L, int k){
L[k].cur = L[0].cur;
L[0].cur = k;
}
//打印鏈表
void staticListLog(StaticLinkList L){
int length = ListLength(L);
int tag = L[MaxSize-1].cur;
for ( int i = 0; i < length; i++) {
printf("%d---", L[tag].data);
tag = L[tag].cur;
}
printf("------\n");
}