浙大資料結構自用筆記(2) 線性表之順序表

2021-09-29 16:46:06 字數 2418 閱讀 9251

順序表的定義

/*

順序表的定義

*/typedef

struct lnode * list;

//將struct lnode *型別重新命名為list

struct lnode //用陣列定義struct lnode型別,即線性表

;struct lnode l;

//定義struct lnode型別的變數,變數名為l

list ptrl;

//定義struct lnode *型別的變數,變數名為ptrl

//訪問下標為i的元素:l.data[i] 或者ptrl->data[i]

//線性表的長度:l.last + 1或ptrl->last + 1 //因為是從0開始的,所以+1

順序表的初始化
/*

初始化*/

list makeempty()

//返回值是struct lnode *

查詢
/*

查詢查詢成功的平均比較次數是(n+1)/2(最好情況是被查詢的值在表頭->查詢1次,最壞情況是,被查詢的值在表尾->查詢n次)

時間複雜度:o(n)

*/int

find

( elementtype x, list ptrl)

插入
/*

對應的,即在陣列的第i-1個位置插入

分析: 把線性表中第i-1及以後的所有元素都往後挪乙個位置

步驟:先移動,再插入

注:從表尾開始移動,即先將an移到an+1,再把an-1移到an的位置,以此類推

時間複雜度:o(n)

平均移動次數:n/2 (最好情況是,插入到表尾->移動0次,最壞情況是,插入到表頭,移動n次)

*/void

inset

(elementtype x,

int i, list ptr)

if(i <

1|| i>ptrl->last+2)

//判斷插入位置是否合法z,

//原來表長是last+1,加入乙個新元素成功後的表長是last+2,當i = last +2時表示插入到表尾了

for(j = ptrl->last; j >= i-

1; j--

)//將ai~an倒序向後移動

ptrl->data[j+1]

= ptrl->data[j]

;//最後一步是把線性表中第i個元素的值賦給第i+1個,騰出線性表中第i個的格仔

//即要把陣列第i-1項的值賦給第i項

ptrl->data[i-1]

= x;

ptrl->last++

;//等價於 ptrl->last = ptrl->last + 1; 因為表長+1了,所以last也要+1

// last仍然指向線性表最後乙個元素}/*

總結:插入的實質是把要插入的元素的值賦給陣列裡面相應的位置

我要把這個新的值放到陣列的某個位置,但是這個位置已經有值了,所以要把這個值往後挪,給新的值騰地方

陣列的空間是給定的,只是賦值讓線性表看起來是插入了乙個新的元素

*/

刪除
/*

刪除:刪除線性表的第i(1<=i<=n)個位置的元素

對應的,即刪掉陣列第i-1個元素

分析:把陣列中第i個及以後的所有元素都往前移

注:從第i個位置開始,用第i個元素的值覆蓋第i-1個元素的值,達到刪除目的

時間複雜度:o(n)

平均移動次數:(n-1)/2(最好情況是,被刪除的元素在表尾->移動0次,最壞情況是,被刪除的元素在表頭,即除了第乙個元素,其他元素都被移動了->移動n-1次)

*/void delete (

int i, list ptrl)

for(j=i; j<=ptrl->last; j++

)//將ai~an順序向前移動

ptrl->data[j-1]

= ptrl->data[j]

;//把線性表第i+1項的值賦給第i項,即在陣列中,把第j項的值賦給第j-1項

ptrl->last--

;//刪除後表長-1,所以last-1,last仍然指向最後乙個元素

return;}

/*總結:

和插入類似,刪除的實質就是用後面的值覆蓋要刪除的值

同樣的,線性表的記憶體是給定的,刪除乙個元素,就把它的值用其他元素覆蓋即可

*/

資料結構 筆記2 線性表

線性表是最簡單,最常用的一種資料結構,它是由n個資料元素 結點 組成的有限序列。線性表的基本運算 1.置空表 initlist l 構造乙個空的線性表l 2.求表長 listlength l 返回線性表l中元素個數,即表長。3.取表中第i個元素getnode l,i 若1 i listlength ...

資料結構之線性表 2

線性表一般分為順序表和煉表,本篇是對鍊錶的回顧,以c 建立簡單 帶頭結點 遞增單鏈表,實現插入和逆置功能為例。鍊錶的形式有很多種,其中最簡單 最基礎的是單鏈表。其他諸如迴圈鍊錶 雙向鍊錶 雙向迴圈鍊錶等,應該算是基於單鏈表的變形,個人認為其本質也還是單鏈表。單鏈表用來表示線性表時,其定義是 乙個儲存...

資料結構之線性表(2)

線性表的鏈式儲存特點使用一組任意的儲存單元儲存線性表的資料元素,這組儲存單元可以是連續的,也可以是不連續的。鍊錶中第乙個節點儲存的位置叫頭指標。單鏈表的第乙個節點前附設乙個節點叫頭結點。頭指標 頭指標是指鍊錶指向第乙個節點的指標,若煉表有頭結點,則是指向頭指標的結點。頭指標具有標識作用,所以常用頭指...