THƯ VIỆN CÁC COLLECTION TRONG JAVA VÀ ÁP DỤNG.
8.3.3 Danh sách liên kết (Linked List)
Định nghĩa: Danh sách liên kết (linked list) là một cấu trúc dữ liệu bao gồm một nhóm các nút (nodes) tao thành một chuỗi. Thông thường mỗi nút gồm dữ liệu (data) ở nút đó và tham chiếu (reference) đến nút kế tiếp trong chuỗi.
Danh sách liên kết là một trong những cấu trúc dữ liệu đơn giản và phổ biến nhất. Ưu điểm:
209 Dễ dàng thêm hoặc xóa các phần tử trong danh sách mà không cần phải cấp phát hoặc tổ chức lại trật tự của mảng.
Cấp phát bộ nhớ động Nhược điểm:
Một danh sách liên kết đơn giản không cho phép truy cập ngẫu nhiên dữ liệu.
Chính vì lí do trên mà một số phép tính như tìm phần tử cuối cùng, xóa phần tử ngẫu nhiên hay chèn thêm, tìm kiếm có thể phải duyệt tất cả các phần tử.
Ví dụ khai báo: Struct LLnode { DataType Data; LLnode* next; }; Các phép toán: Khai báo: struct LLintNode { int Data;
struct LLintNode* Next; };
Đếm số phần tử của Linked List:
Duyệt từng phần tử rồi đếm, cho đến khi nào gặp phần tử cuối.
int LengthLL(LLNode* head) { int length = 0;
while (head != NULL) { ++length;
head = head ->Next; }
210
}
Thêm một phần tử vào cuối linked list: Nếu danh sách rỗng, thêm nút vào head.
Ngược lại, tìm phần tử cuối cùng của danh sách rồi thêm nút mới vào Next của nút cuối cùng đó:
void AddLast(LLNode** head, int data) { LLNode** tmp = head;
LLNode* NewNode;
NewNode = (LLNode*) malloc(sizeof(LLNode)); NewNode->Data = data;
NewNode->Next = NULL;
if ((*tmp) == NULL) { (*tmp) = NewNode; } else {
while ((*tmp)->Next !=NULL) { tmp = &((*tmp)->Next);
}
(*tmp)->Next = NewNode; }
211 Ngoài những mô tả các thao tác kể trên, dựa vào cấu trúc trên ta hoàn toàn có thể tạo ra phương thức addLast, removeFirst, insertAt…