C. Mở rộn g: Danh sách liên kết đơn
3, Cài đt danh sách liên ơ
Trước khi cài đ t danh sách liên k t đ n, đi u c n thi t là chúng ta ph i n m v ng ặ ế ơ ề ầ ế ả ắ ữ
ph n c p phát đ ng ( memory allocation ) và con tr ( pointer ) trong ngôn ng C/C++.ầ ấ ộ ỏ ữ
Do danh sách liên k t đ n là m t c u trúc d li u đ ng, thao tác v i ph n c ng máy ế ơ ộ ấ ữ ệ ộ ớ ầ ứ
tính nhi u h n nên n u khơng ch c các ki n th c trên thì có th s r t khó hi u v i bàiề ơ ế ắ ế ứ ể ẽ ấ ể ớ
vi t này. Trong ph n này, chúng ta s th c hành v i ngôn ng C.ế ầ ẽ ự ớ ữ
3.1, T o c u trúc Nodeạ ấ
Nh đã đ c p trên, m t Node s ch a 1 thành ph n giá tr và m t thành ph n liên ư ề ậ ở ộ ẽ ứ ầ ị ộ ầ
k t ) có ki u Node. T i sao l i v y ? B i con tr đó s ch a m t giá tr là đ a ch c a ế ể ạ ạ ậ ở ỏ ẽ ứ ộ ị ị ỉ ủ
m t Node ti p theo nên nó cũng ph i có ki u Node. Hình nh dộ ế ả ể ả ưới là đo n code c u ạ ấ
t o m t Node :ạ ộ
Đ d hi u h n, thì chúng ta có th nhìn hình v dể ễ ể ơ ể ẽ ưới đây:
đ u, chúng ta có 1 Node mang thành ph n giá tr ki u s nguyên là 5, ti p đó là con
Ở ầ ầ ị ể ố ế
tr ch a đ a ch c a Node ti p theo. Đ a ch ln ln có d ng th p l c phân nên con ỏ ứ ị ỉ ủ ế ị ỉ ạ ậ ụ
tr Node đ u tiên s ch a đ a ch c a con tr ti p theo là “D95AF” và có thành ph n ỏ ở ầ ẽ ứ ị ỉ ủ ỏ ế ầ
cùng ki u nguyên có giá tr là 89. Do Node ch a giá tr 89 đ ng cu i nên con tr ể ị ứ ị ứ ở ố ỏ
trong nó s ch t i NULL, còn nh ch ?ẽ ỉ ớ ớ ứ
3.2, T o c u trúc danh sách liên k t đ nạ ấ ế ơ
Sau khi có được c u trúc m t Node, ti p theo chúng ta c n qu n lý chúng b ng ph n tấ ộ ế ầ ả ằ ầ ử
đ u và ph n t cu i. Vì m i ph n t đ u liên k t v i ph n t k ti p nên chúng ta c n ầ ầ ử ố ỗ ầ ử ề ế ớ ầ ử ế ế ầ
con tr l u tr giá tr đ a ch c a chúng. Nh con tr đ u thì l u đ a ch c a ph n t ỏ ư ữ ị ị ỉ ủ ư ỏ ầ ư ị ỉ ủ ầ ừ
đ u ( * pHead ) và con tr ti p theo thì l u đ a ch v trí c a ph n t cu i ( * pTail )ầ ỏ ế ư ị ỉ ị ủ ầ ử ố
Đ d hi u h n, chúng ta ti p t c v i hình nh ví d nh ph n trên :ể ễ ể ơ ế ụ ớ ả ụ ư ầ
V y, con tr pHead s ch a đ a ch Node đ u là “D60AX” và pTail là “D95AF”. ậ ỏ ẽ ứ ị ỉ ầ
Nh ng, đ i v i m t danh sách ch a ch a Node nào thì chúng ch a gì ? Đ n gi n là ư ố ớ ộ ư ứ ứ ơ ả
chúng cũng ch a Null nh Node cu i vì cũng ch ng có gì đ tr đ n c . Dứ ư ở ố ẳ ể ỏ ế ả ưới đây là ph n code :ầ
3.3, T o 1 Nodeạ
Đ t o m t node m i, ta th c hi n c p phát đ ng cho node m i, kh i t o giá tr ban ể ạ ộ ớ ự ệ ấ ộ ớ ở ạ ị
vào bài toán chúng ta g p. đây, ta s truy n m t giá tr nguyên ( int x ). Ti p đ n là ặ Ở ẽ ề ộ ị ế ế
c p phát b nh đ ng cho Node, th dùng hàm sizeof(NODE), ta đấ ộ ớ ộ ử ược k t qu là 16 ế ả
byte cho 1 Node ( g m 1 s nguyên và m t con tr ). Cu i cùng hàm s tr v đ a ch ồ ố ộ ỏ ố ẽ ả ề ị ỉ
c a Node và ta có th gi i quy t các bài toán v sau.ủ ể ả ế ề