Professional Documents
Culture Documents
Tổng quan
• DSLK
– Abstract data type (ADT)
• Các thao tác cơ bản của DSLK
– Thêm, tìm, xoá, xuất, v.v.
• Các biến thể của DSLK
– DSLK vòng
– DSLK kép
A B C ∅
Head
data pointer
z11/2/2009 zThS Nguyễn Quốc Huy z3
DSLK đơn
• Sử dụng 2 cấu trúc: Node và List
• Khai báo cấu trúc Node cho các nút
– data: double-kiểu dữ liệu cho ví dụ này
– next: con trỏ trỏ đến nút kế trong danh sách
int IsEmpty() {
if (head==NULL) return 1;
return 0;
}
Node* InsertNode(int index, double x);
int FindNode(double x);
int DeleteNode(double x);
void DisplayList(void);
DSLK đơn
• Các thao tác của List
– IsEmpty: xác định danh sách rổng hay không
– InsertNode: thêm 1 nút mới vào 1 vị trí bất kì
– FindNode: tìm 1 nút với một giá trị cho trước
– DeleteNode: xoá một nút với một giá trị cho
trước
– DisplayList: xuất tất cả các nút trong danh
sách
• Các bước
index’th
1. Định vị thành phần thứ index element
int currIndex = 1;
Node* currNode = head;
while (currNode && index > currIndex) {
currNode = currNode->next;
currIndex++;
}
if (index > 0 && currNode == NULL) return NULL;
int currIndex = 1;
Node* currNode = head;
while (currNode && index > currIndex) {
currNode = currNode->next;
currIndex++;
}
if (index > 0 && currNode == NULL) return NULL;
int currIndex = 1;
Node* currNode = head;
while (currNode && index > currIndex) {
currNode = currNode->next;
currIndex++;
}
if (index > 0 && currNode == NULL) return NULL;
int FindNode(double x) {
Node* currNode= head;
int currIndex = 1;
while (currNode && currNode->data != x) {
currNode = currNode->next;
currIndex++;
}
if (currNode) return currIndex;
return 0;
}
z11/2/2009 zThS Nguyễn Quốc Huy z13
void DList() {
Node* currNode = head, *nextNode = NULL;
while (currNode != NULL)
{
nextNode = currNode->next;
// destroy the current node
delete currNode;
currNode = nextNode;
}
}
z11/2/2009 zThS Nguyễn Quốc Huy z19
6
7 KQ
Sử dụng List 5
Số nút trong danh sách: 3
5.0 found
4.5 not found
6
int main(void) 5
{ Số nút trong danh sách: 2
A B C
Head
– Vậy thì duyệt danh sách như thế nào? (Xem con
trỏ nút hiện hành có là Head chưa.)
∅ A B C ∅