Cấu Trúc Dữ Liệu Và Giải Thuật Chapter 3.2 Singlelist Tài Liệu Bao Gồm 6 Chapter Mong các bạn theo dõi đầy đủ để đạt kết quả cao . Để Cập Nhật Thêm Tìm Hiểu Hơn Nữa Về Tài Liệu IT Thì Các Bạn Có Thể Truy Cập : https:123doc.orgtrangcanhan4336953tailieuit.htm CẢM ƠN CÁC BẠN ĐÃ THEO DÕI
Phần 2: Danh sách liên kết Danh sách liên kết DSLK là cấu trúc dữ liệu động Các phần tử danh sách (node) nằm rải rác bộ nhớ Cấu trúc mỗi node: Vùng dữ liệu Vùng liên kết (chứa địa chỉ node kế tiếp hoặc node liền trước) Thao tác thêm/xóa nút chỉ cần điều chỉnh lại các liên kết Danh sách liên kết (List) Danh sách liên kết đơn: phần tử liên kết với phần tử đứng sau danh sách: A B X Z Y Danh sách liên kết đôi: phần tử liên kết với phần tử đứng trước sau danh sách: A B C D Danh sách liên kết (List) Danh sách liên kết vòng : phần tử cuối danh sách liên kết với phần tử đầu danh sách: A B A X B Z C Y D Danh sách liên kết đơn Mục tiêu Khái niệm DSLK đơn Biểu diễn, quản lý DSLK đơn Các thao tác DSLK đơn Sao chép DSLK đơn Sắp xếp DSLK đơn Khái niệm DSLK đơn chuỗi node (nút), tổ chức theo thứ tự tuyến tính Mỗi node gồm phần: Phần Data: Lưu trữ liệu Phần liên kết: Lưu trữ địa phần tử danh sách, hoạc lưu trữ giá trị NULL phần tử cuối danh sách Data Next Node Biểu diễn nút DSLK đơn DataType ? struct Node { DataType data; struct node *Next; }; struct Node { int data; Node *Next; }; Cấu trúc node typedef struct Node { SinhVien data; struct node *Next; }; Biểu diễn, quản lý DSLK đơn Để quản lý DSLK đơn cần biết địa phần tử đầu danh sách Con trỏ pHead dùng để lưu trữ địa phần tử đầu danh sách: NODE* pHead; Để tiện lợi, sử dụng thêm trỏ pTail lưu địa phần tử cuối danh sách: NODE* pTail; pTail pHead A B X Z Y Các thao tác DSLK đơn Khởi tạo danh sách Thêm phần tử vào danh sách Tìm kiếm giá trị danh sách Trích phần tử khỏi danh sách Duyệt danh sách Hủy toàn danh sách 10 Phương pháp đổi chỗ trực tiếp l.pTail q l.pHead p 51 12 Phương pháp đổi chỗ trực tiếp Dừng l.pTail q l.pHead p 52 12 Phương pháp đổi chỗ trực tiếp void InterChangeSort ( List &l ) { Node *p, *q; for (p = l.pHead ; p!=l.pTail ; p=p->Next ) for (q = p->Next; q!=NULL ; q=q->Next ) if ( p->data > q->data ) Swap( p->data , q->data ); } 53 Phương pháp chọn l.pTail l.pHead 12 p 54 Phương pháp chọn l.pTail l.pHead p 55 12 Phương pháp chọn l.pTail l.pHead p 56 12 Phương pháp chọn l.pTail l.pHead p 57 12 Phương pháp chọn Dừng l.pTail l.pHead 12 p 58 Phương pháp chọn void SelectionSort (LIST &l) { for ( Node* p = l.pHead ; p != l.pTail ; p = p->Next ) { Node* = p; for ( Node* q = p->Next ; q != NULL ; q = q->Next ) if ( min->data > q->data ) = q ; Swap(min->data, p->data); } } 59 Phương pháp bọt (Bubble) l.pTail q->Next l.pHead 12 q 60 Phương pháp bọt (Bubble) l.pTail q->Next l.pHead q 61 12 Phương pháp bọt (Bubble) l.pTail q->Next l.pHead q 62 12 Phương pháp bọt (Bubble) l.pTail q->Next l.pHead q 63 12 Phương pháp bọt (Bubble) Dừng l.pTail l.pHead 64 12 Phương pháp bọt (Bubble) void BubleSort (List l) { Node *p, *q, *t, *t1; t = l.pTail ; for (p = l.pHead ; p != NULL ; p = p->Next) { for (q = l.pHead; q!=t ; q=q->Next){ if( q->data > q->Next->data ) Swap( q->data , q->Next->data); t1 = q ; } t = t1; } } 65 ... tử vào danh sách Thêm vào đầu danh sách Thêm vào cuối danh sách Thêm vào sau một nút q bất kỳ 14 4.3 Thêm phần tử vào danh sách Thêm vào đầu danh sách 15 4.3 Thêm phần tử vào... Chèn nút vừa tạo vào danh sách; 19 4.3 Thêm phần tử vào danh sách Thêm phần tử vào sau phần tử q 20 4.3 Thêm phần tử vào danh sách Thêm vào sau phần tử q Tḥt tốn • Đầu vào: Danh sách l,... (q==l.pTail) l.pTail=p; } else ChenDau(l, p); } 22 4.3 Thêm phần tử vào danh sách Thêm vào cuối danh sách 23 4.3 Thêm phần tử vào danh sách Thêm vào cuối danh sách Thuật toán: B1 Kiểm tra nếu DS rỡng