C. Mở rộn g: Danh sách liên kết đơn
3, Cài đặt danh sách liên kết đơ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. Ở đây, tôi sử dụ ng giá trị là mộ t kiể u số nguyên và mộ t con trỏ ( 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ỉ luôn luôn 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 biế t đầ u và cuố i để quả n lý chúng. Các phầ n tử đầ u và cuố i sẽ đượ c quả n lý bằ ng một
con trỏ lư u trữ giá trị đị a chỉ củ a chúng. Như con trỏ đầ u ( * pHead ) và con trỏ tiế p theo thì lư u đị a chỉ vị
đầ u thì lư u đị a chỉ củ a phầ n từ 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 đầ u và trả về đị a chỉ củ a node mớ i đượ c cấ p phát. Ta phả i truyề n mộ t giá trị tùy thuộc
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.