線性表中每個節點有唯一的前趨節點和後繼節點
設計鏈式儲存結構時,每個邏輯節點單獨儲存,為了表示邏輯關係,增加指標域
單鏈表-----每個物理節點增加乙個指向後繼節點的指標域
雙鏈表-----每個物理節點增加乙個指向後繼節點的指標域和乙個指向前趨節點的指標域
typedef
struct lnode //定義單鏈表節點型別
linklist;
單鏈表的特點:當訪問過乙個節點後,只能接著訪問它的後繼節點,而無法訪問它的前趨節點
(1)頭插法建表(鍊錶的節點順序與邏輯次序相反)
從乙個空表開始,建立乙個頭節點依次讀取字元陣列a中的元素,
生成新的節點將新節點插入到當前鍊錶的表頭上,直到結束為止
void
createlistf
(linklist *
&l,elemtype a,
int n)
}
(2)尾插法建表(鍊錶的節點順序與邏輯次序相同)
從乙個空表開始,建立乙個頭節點依次讀取字元陣列a中的元素,生成新的節點
將新節點插入到當前鍊錶的表尾上,直到結束為止(增加乙個尾指標r,
使其始終指向當前鍊錶的尾節點)
void
createlistr
(linklist *
&l,elemtype a,
int n)
}
(1)初始化線性表 initlist(l)
該運算建立乙個空的單鏈表,即建立乙個頭節點
void
initlist
(linklist *
&l)
釋放單鏈表l占用的記憶體空間,即逐一釋放全部節點的空間
void
destroylist
(linklist *
&l)free
(pre)
;//迴圈結束時,p為null,pre指向尾節點,釋放它
}
(3)判斷是否為空表 listempty(l)
若單鏈表l沒有資料節點則為空表,返回true,否則返回false
bool listempty
(linklist *l)
(4)求線性表的長度 listlength(l)
該運算返回單鏈表l中資料節點的個數
int
listlength
(linklist *l)
return
(n);
//迴圈結束,p指向尾節點,其序號n為尾節點個數
}
(5)輸出線性表 displist(l)
逐一掃瞄單鏈表l的每個資料節點,並顯示各節點的data域值
void
displist
(linklist *l)
printf
("\n");
}
(6)求線性表l中位置 i 的資料元素值 getelem(l,i,&e)
在單鏈表l中從頭開始找到第i個節點,若存在第i個資料節點,則將其data域值給e
bool getelem
(linklist * l,
int i, elemtype &e)
if(p ==
null
)//不存在第i個資料節點,返回false
return false;
else
//存在第i個資料節點,返回true
}
(7)按元素值查詢 lacateelem(l,e)
在單鏈表l中從頭開始找第1個值域與e相等的節點。
若存在這樣的節點,則返回位置,否則返回0
int
locateelem
(linklist *l, elemtype e)
if( p ==
null
)return(0
);//不存在元素值為e的節點,返回0
else
return
(i);
//存在元素值為e的節點,返回其邏輯序號i
}//演算法的時間複雜度為o(n)------不具有隨機訪問特性
(8)插入資料元素 listinsert(&l,i,e)
先在單鏈表l中找到第i-1個節點*p,若存在這樣的節點,將值為e的節點*s插入到其中
bool listinsert
(linklist *
&l,int i,elemtype e)
if( p ==
null
)return(0
);//未找到第i-1個節點,返回false
else
}
(9)刪除資料元素 listdelete(&l,i,e)
先在單鏈表l中找到第i-1個節點 *p,若存在這樣的節點,
且也存在後繼節點,則刪除該後繼節點
bool listdelete
(sqlist *
&l,int i,elemtype &e)
if( p ==
null
)return false;
//未找到第i-1個節點,返回false
else
//找到第i-1個節點*p
}
資料結構學習筆記 單鏈表
陣列優勢在於快速定位元素,對於讀操作多,寫操作少的場景,陣列更合適 鍊錶優勢在於快速的插入和刪除操作,如果頻繁的在尾部刪除和插入元素,用鍊錶更好 package com.cc.node public class nodedemo1 private node head private node las...
資料結構學習筆記 單鏈表
準備知識在另一篇部落格 單鏈表預備知識 建立單鏈表 頭插法 每次都是從頭結點插入乙個元素的方法,所以它是倒序的。struct lnode 建立結點結構體,由資料域和指標域組成 linknode void createlistf linknode l,elemtype a,int n 從陣列a中讀取資...
資料結構學習筆記3 單鏈表
1.相對於順序表的線性儲存,順序表的鏈式儲存 單鏈表為例 最突出的優點 對元素的插入與刪除非常快 順序表的線性儲存插入和刪除需要移動大量的元素,操作速度緩慢 而獲取元素的速度相對而言比較快 單鏈表剛好和他相反,插入和刪除很快,獲取元素速度比不上線性表 2.單鏈表的形式 3.單鏈表的插入和刪除 4.除...