最近在複習大學學習的靜態鍊錶資料結構,從**分析結構,卡在了備用鍊錶那裡,通過畫圖分析才掌握了它的結構。
首先我們先來看看靜態鍊錶的結構定義
typedef
struct
component,staticlinklist[maxsize]
;
status initlist
(staticlinklist l)
l[maxsize-2]
.cur =0;
//備用鍊錶的表尾
l[maxsize-1]
.cur =0;
//資料鏈表表頭
return ok;
}
初始化為空的靜態鍊錶如下圖一所示
圖一 空的靜態鍊錶
接下來才是重點!!!實際上靜態鍊錶分為兩個鍊錶:備用鍊錶和資料鏈表(兩表的表頭位置如上圖一所示)。備用鍊錶將未使用空間串聯起來,資料鏈表才是真正存放資料的地方,那麼具體是怎樣儲存資料的呢?接下來我們在資料鏈表中插入數字1,看以下向資料鏈表中插入資料的**:
status insertlist
(staticlinklist l,
int i,elemtype e)
printf
("備用鍊錶為空!\n");
return error;
//備用鍊錶為空
}
int
malloc_l
(staticlinklist l)
return i;
}
呼叫如下插入函式,其效果如下圖二。
圖二 向備用鍊錶新增乙個元素
圖二中用紅色字型標註的顯然是資料鏈表了,剩下的黑體字標註的是備用鍊錶,每當要插入乙個資料時,備用鍊錶中便有一塊空間轉化成資料鏈表的空間,其轉換細節分為以下四個步驟:
記錄備用煉表頭l[0]游標,更改l[0]游標為2,使其指向l[2],此時備用鍊錶操作完成
給l[1]的資料元素賦值,l[1]將加入資料鏈表中
遍歷資料鏈表l[4]到要插入位置(第i位置)的前乙個資料元素(第i-1位置),將位於i-1位置的元素游標賦值給位於i位置的元素游標
將插入元素的位置i賦值給位於i-1位置的元素游標,資料鏈表的插入操作完成
通過以上步驟的分析相信大家都已經熟悉了靜態鍊錶的插入操作,那麼接下來再執行以下函式,你們能畫出靜態鍊錶的資料結構圖嗎?
insertlist
(l,1,2
);
參考圖如下,是不是畫對了呢?
圖三 向備用鍊錶新增乙個元素
#include
#define maxsize 5
#define error 0
#define ok 1
typedef bool status;
typedef
int elemtype;
typedef
struct
component,staticlinklist[maxsize];
status visit
(elemtype c)
;//刷出函式
status initlist
(staticlinklist l)
;//初始化靜態鍊錶
intmalloc_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);
printf
("插入兩個元素後鍊錶的長度為:%d\n"
,listlength
(l))
;deletelist
(l,2);
outlist
(l);
printf
("刪除乙個元素後鍊錶的長度為:%d\n"
,listlength
(l))
;return0;
} status initlist
(staticlinklist l)
l[maxsize-2]
.cur =0;
//用鍊錶的表尾
l[maxsize-1]
.cur =0;
//資料鏈表表頭
return ok;
}//返回備用煉表表頭所指向的第乙個空閒空間供插入元素,更新表頭游標指向下一空閒空間
intmalloc_l
(staticlinklist l)
return i;}
status insertlist
(staticlinklist l,
int i,elemtype e)
printf
("備用鍊錶為空!\n");
return error;
//備用鍊錶為空}
status deletelist
(staticlinklist l,
int i)
void
free_l
(staticlinklist l,
int j)
intlistlength
(staticlinklist l)
return j;
}void
outlist
(staticlinklist l)
printf
("\n");
} status visit
(elemtype c)
Say「No」,你學會了嗎?
say no 你學會了嗎?2004 年,當蕭聖璇剛回國加入微軟亞洲工程院時,有乙個現象讓他難以適應 開會討論時,大家要麼三緘其口,要麼發表的意見不溫不火,會議結束後,大家卻接二連三地來到他的辦公室,開始對會議上的問題發表看法。在蕭聖璇看來,這些原本要在開會時解決的問題,為什麼非要留到會後才提出來?蕭...
CSS你學會了嗎
css樣式 1 文字域內容解析換行,解析換行符 white space pre wrap 2 全域性黑白色 須在html上設定 html 3 水平垂直居中 center 水平垂直居中 span div 預設初始化樣式 body center 1 line height水平垂直居中 父節點固定px高度...
Say「No」,你學會了嗎?
say no 你學會了嗎?2004 年,當蕭聖璇剛回國加入微軟亞洲工程院時,有乙個現象讓他難以適應 開會討論時,大家要麼三緘其口,要麼發表的意見不溫不火,會議結束後,大家卻接二連三地來到他的辦公室,開始對會議上的問題發表看法。在蕭聖璇看來,這些原本要在開會時解決的問題,為什麼非要留到會後才提出來?蕭...