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.除...