Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 7 Danh sách liên kết, cung cấp cho người học những kiến thức như: các loại danh sách liên kết; danh sách liên kết đơn; cấu trúc dữ liệu của danh sách liên kết đơn; khởi tạo danh sách liên kết đơn. Mời các bạn cùng tham khảo!
A B C D A B C D KHOA CÔNG NGHỆ THÔNG TIN A B C D A B C D KHOA CÔNG NGHỆ THÔNG TIN DANH SÁCH LIÊN KẾT ĐƠN (LIST) KHOA CÔNG NGHỆ THÔNG TIN x0 KHOA CÔNG NGHỆ THÔNG TIN x2 x1 x3 pNext Info KHOA CÔNG NGHỆ THÔNG TIN pHead pTail 4f 3f 4f 5f 5f NULL Trong ví dụ thành phần liệu số nguyên KHOA CÔNG NGHỆ THÔNG TIN Tạo danh sách liên kết đơn rỗng Tạo nút có trường Info x Tìm phần tử có Info x Thêm phần tử có khóa x vào danh sách Hủy phần tử danh sách Duyệt danh sách Sắp xếp danh sách liên kết đơn KHOA CÔNG NGHỆ THÔNG TIN Đầu tiên thiết lập Node class Node { public int iData; public Node pNext; public Node(int value) { this.iData = value; this.pNext = null; } } KHOA CÔNG NGHỆ THƠNG TIN 10 • Minh họa hình vẽ pHead A X KHOA CÔNG NGHỆ THÔNG TIN B C D pTail 56 KHOA CƠNG NGHỆ THƠNG TIN 57 • Minh họa thêm phần tử vào sau danh sách pTail pHead A B C D X KHOA CÔNG NGHỆ THÔNG TIN 58 public void AddTail(ref List l, Node p) { if (l.pHead == null) // kiểm tra ds rỗng (pHead == null) { l.pHead = l.pTail = p; // Node p vừa đầu, vừa cuối } else // danh sách không rỗng { l.pTail.pNext = p; // Nếu Node p đứng cuối ds p.pPrev = l.pTail; // Node p gọi pPrev đến Node cuối danh sách (pTail) l.pTail = p; // Node p cập nhật Node cuối danh sách } } KHOA CƠNG NGHỆ THƠNG TIN 59 • Minh họa thêm nút X vào sau nút q pHead A pTail q B C D X KHOA CÔNG NGHỆ THÔNG TIN 60 void AddAfterQ(ref List l, Node tam, Node q) { Node p; p = q.pNext; if( q != null )//them vao duoc { tam.pNext = p; tam.pPre = q; q.pNext = tam; if( p != null ) p.pPrev = tam; if(q == l.pTail) //them vao sau danh sach lien ket l.pTail = tam; } else // chèn vào đầu danh sách AddHead(ref l, p); } KHOA CÔNG NGHỆ THÔNG TIN 61 • Minh hoạ thêm nút vào trước nút q pHead A pTail q B C D X KHOA CÔNG NGHỆ THÔNG TIN 62 void AddBeforeQ(ref List l, Node tam, Node q) { Node p = q.pPrev; if( q != null ) { tam.pNext = q; q.pPre = tam; tam.pPrev = p; if(p != null) p.pNext = tam; if(q == l.pHead) l.pHead = tam; } else AddTail(ref l, p); } KHOA CÔNG NGHỆ THÔNG TIN 63 int DeleteFirst(ref List l) { Node p; int x = 0; if(l.pHead != null) { p = l.pHead; x = p.Data; l.pHead = l.pHead.pNext; l.pHead.pPrev = null; p = null; if(l.pHead == null) l.pTail = null; else l.pHead.pPrev = null; } return x; } KHOA CÔNG NGHỆ THÔNG TIN 64 void DeleteEnd(ref List l ) { Node p; int x = 0; if(l.pTail != null) //tuc xau co hon mot phan tu { p = l.pTail; x = p.Data; l.pTail = l.pTail.Prev; l.pTail.pNext = null; p = null; if(l.pHead == null) l.pTail = null; else l.pHead.pPrev = null; } return x; } KHOA CÔNG NGHỆ THÔNG TIN 65 void DeleteLastQ(ref List l, Node q) { Node p;//luu node dung sau node q if(q != null) { p = q.pNext; if(p != null) { q.pNext = p.pNext; if(p == l.pTail)//xoa dung nu't cuoi l.pTail = q; else //Nut xoa khong phai nut cuoi p.pNext.pPrev = q; p = null; } } else DeleteFirst(ref l); } KHOA CÔNG NGHỆ THÔNG TIN 66 void DeleteBeforeQ(ref List l, Node q) { Node p; if(q != null) //tuc ton tai node q { p = q.pPrev; if(p != null) { q.pPrev = p.pPrev; if(p == l.pHead)//p la Node dau cua danh sach l.pHead = q; else //p khong phai la node dau p.pPrev.pNext = q; p = null; } } else DeleteEnd(ref l); } KHOA CÔNG NGHỆ THÔNG TIN 67 void DeleteX(ref List l, int x) { Node q = null; for (Node p = l.pHead; p != null; p = p.pNext) { if (p.Data == x) { if (q == null) DeleteFirst(ref l); else DeleteLastQ(ref l, q); break; } q = p; } } KHOA CÔNG NGHỆ THÔNG TIN 68 void DoiChoTrucTiep(ref List l) { Node p,q; p = l.pHead; while(p != l.pTail) { q = p.pNext; while(q != NULL) { if(p.Data > q.Data) HoanVi(ref p.Data, q.Data); q = q.pNext; } p = p.pNext; } } KHOA CÔNG NGHỆ THÔNG TIN 69 BÀI TẬP (15 phút): Tạo danh sách sau: ["hanoi", "saigon", "danang", "nhatrang", "cantho"] Sau viết lệnh sau a)Chèn hue vào vị trí 3? b)Sửa danang thành phuyen? c)Chèn cantho vào vị trí 2? d)Xóa cantho? e)Xóa tất cantho? f)Đổi chỗ saigon nhatrang? g) Tìm kiếm cantho? KHOA CƠNG NGHỆ THƠNG TIN 70 ... nộp: Cấu trúc liệu danh sách liên kết đơn quản lý số nguyên: Khai báo Node Khai báo MyLinkedList gồm thao tác: - Void AddHead(Node p) - Void AddTail ( Node p) - Void AddAfterQ( Node q, Node p) -. .. Nguyên tắc thêm: Khi thêm phần tử vào List có làm cho pHead, pTail thay đổi? Các vị trí cần thêm phần tử vào List: ‐ Thêm vào đầu List ‐ Thêm vào cuối List ‐ Thêm vào sau phần tử q list KHOA CÔNG... Xoá phần tử có khố x xâu Sắp xếp xâu tăng dần theo thành phần liệu (Info) Chèn phần tử vào xâu, cho sau chèn xâu tăng dần theo trường liệu KHOA CÔNG NGHỆ THÔNG TIN 46 Dùng xâu đơn để lưu trữ danh