資料結構學習筆記 關於單鏈表

2021-10-17 12:16:19 字數 1930 閱讀 6346

1.首先是結構體的定義

typedef

struct node

node;

typedef

struct node *linklist;

表示struct node 和 node是等價的。

int data,儲存的資料型別。

宣告了乙個指向struct node型別的next指標。

同時宣告了指向node結構體的乙個linklist指標。

struct student

s1,s2;

定義了乙個student資料型別的結構體,和s1,s2兩個結構體變數。

2.關於指標

int

*a =

null

;int b =3;

a =&b;

printf

("%d"

,*a)

;

3.初始化鍊錶

node*

initlist()

定義了初始化函式,返回的是node型別的頭指標。

linklist head為指向結構體node的乙個指標變數。malloc返回的是void型別,這裡強制轉換node,或者linklist head = (linklist)malloc(sizeof(node));

這一句,為指標動態分配記憶體,生成乙個頭結點。

將指標域指空,返回head頭指標的位址。

//呼叫函式時,傳參為位址。

4.建立,寫入資料到鍊錶

//void insertlist(linklist *l, int *a)/*建立鍊錶*///陣列傳入寫法

void

insertlist

(linklist *l)

/*建立鍊錶*/

/ q->next =

null

;//最後乙個結點next設為空

}

引數linklist l為指向結構體指標linklist的指標l。呼叫函式時,l賦值為init函式返回頭指標的位址。

呼叫時node *head = initlist();insertlist(&head);

指標l是struct node的二級指標,head是struct node的一級指標。l為struct node*, head為sturct node*, 為l賦值需要再取位址一次,所以引數為&head。

相當於linklist *l = &head,此時 l被賦值head的位址,l指向的是head的位址,*l就是head頭結點了。

定義兩個指向node結構體的指標p,q。尾插法p->data,左邊p指向結構體的指標進行->操作,迴圈實現尾插法。最後乙個結點的指標域設為null。

5.遍歷,輸出鍊錶

void

showlinklist

(linklist *l)

//展示鍊錶

}

node結構體指標k指向頭結點。

頭結點無資料,所以檢查下乙個結點有無資料就可以,遍歷輸出。(*k).data也可以輸出。

7.刪除指定結點

原理:找到指定結點的前驅結點,將前驅結點指向下下個結點,釋放free指定節點,指向null。

void

(linklist *l,

int num)

//刪除指定結點

else}if

((flag && current)==1

)printf

("找不到");

}

有錯誤請指正,感謝瀏覽o。

結束。今天看靜態鍊錶。

資料結構學習筆記 單鏈表

陣列優勢在於快速定位元素,對於讀操作多,寫操作少的場景,陣列更合適 鍊錶優勢在於快速的插入和刪除操作,如果頻繁的在尾部刪除和插入元素,用鍊錶更好 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.除...