CẤU TRÚC DỮ LIỆU - Chương 6: DANH SÁCH (LIST) pptx

85 908 2
CẤU TRÚC DỮ LIỆU - Chương 6: DANH SÁCH (LIST) pptx

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Môn: CẤU TRÚC DỮ LIỆU Chương 6: DANH SÁCH (LIST) Danh sách liên kết (Linked List) 4.1 Định nghĩa 4.2 Danh sách liên kết đơn (Simply Linked List) 4.3 Danh sách liên kết kép (Doubly Linked List) 4.4 Danh sách liên kết vòng 4.5 Ưu nhược điểm danh sách liên kết Danh sách liên kết (tt) 4.1 Định nghĩa  Là tập hợp phần tử mà chúng có nối kết với thơng qua vùng liên kết chúng  Tùy cách liên kết phần tử, danh sách liên kết chia thành loại khác nhau: ◦ ◦ ◦ ◦  Danh sách liên kết đơn Danh sách liên kết đôi/kép Danh sách đa liên kết Danh sách liên kết vòng (vịng đơn, vịng đơi) Mỗi loại danh sách có cách biểu diễn theo cấu trúc liệu thao tác liệu khác 4.2 Danh sách liên kết đơn (SLL) 4.2 Danh sách liên kết đơn (SLL) 4.2.1 Cấu trúc liệu  Nội dung phần tử (nút) danh sách liên kết gồm vùng Vùng liệu Vùng liên kết struct node { int data; node *link; // liên kết đến vùng phần tử }; data link 4.2 Danh sách liên kết đơn (SLL) 4.2.1 Cấu trúc liệu 4.2 Danh sách liên kết đơn (tt) 4.2.1 Cấu trúc liệu (tt)  Để quản lý danh sách liên kết dùng nhiều phương pháp khác nhau, phương pháp có cấu trúc liệu cụ thể ◦ Quản lý địa phần đầu cuối danh sách struct List { Node *pHead; Node *pTail; }; pHead info pNext pTail 4.2 Danh sách liên kết đơn (tt) 4.2.1 Cấu trúc liệu (tt) 4.2 Danh sách liên kết đơn (tt) 4.2.2 Các thao tác danh sách liên kết đơn a Khởi tạo danh sách SLL b Tạo phần tử (nút) danh sách SLL c Thêm phần tử vào danh sách SLL  Thêm vào đầu | cuối | danh sách liên kết đơn d Duyệt qua nút danh sách e Tìm kiếm phần tử danh sách f Hủy bỏ phần tử danh sách g Hủy danh sách h Tạo danh sách/Nhập danh sách i Tách danh sách thành nhiều danh sách j Nhập nhiều danh sách thành danh sách k Sắp xếp thứ tự phần tử danh sách 4.2 Danh sách liên kết đơn (tt) 4.2.2 Các thao tác danh sách liên kết đơn: Giả sử ta có định nghĩa sau:  struct node{ int data; node *link; };  struct List{ node *pHead; node *pTail; };  node *p;  List l; 4.3 Danh sách liên kết đôi (tt) 4.3.2.e Tìm kiếm phần tử danh sách  Giả sử cần tìm kiếm danh sách liên kết đơn phần tử có phần liệu X  Thuật toán: B1: P = L.First B2: IF (P == NULL OR P->info = X) Thực BKT B3: P = P ->Next B4: Lặp lại B2 BKT: Kết thúc 4.3 Danh sách liên kết đơi (tt) 4.3.2.e Tìm kiếm phần tử danh sách  Cài đặt thuật toán: Node* search(List L, int X) { Node* P = L.First; while (P!= NULL) { if (P->data == X) break; P = P ->Next } return (P); } 4.3 Danh sách liên kết đôi (tt) 4.3.2.f Loại bỏ phần tử danh sách Thuật toán B1: Del = Timkiem(L, X) // Tìm kiếm nút DelData B2: IF(Del== NULL) Thực BKT B3: IF(Del->Pre=NULL AND Del->Next=NULL) B3.1: L.First = L.Last = NULL B3.2: Thực B8 B4: IF (Del ->Pre = NULL) // Loại nút DS B4.1: L.First = L.First ->Next B4.2: L.First ->Pre = NULL B4.3: Thực B8 4.3 Danh sách liên kết đôi (tt) 4.3.2.f Loại bỏ phần tử danh sách Thuật toán B5: IF (Del ->Next = NULL) // Loại nút cuối DS B4.1: L.Last = L.Last ->Pre B4.2: L.Last ->Next= NULL B4.3: Thực B8 // Liên kết nút trước sau nút bị xóa B6: Del->Pre ->Next = Del->Next B7: Del->Next->Pre= Del->Pre // Bỏ mối liên kết Del nút trước & sau B8: Del->Next = Del ->Pre= NULL B9: delete Del BKT: Kết thúc 4.3 Danh sách liên kết đôi (tt) Cài đặt thuật toán: int DeleteNode (List &L, int X){ Node* Del = search(L, X) if (Del == NULL) return (-1); if (Del->Next == NULL && Del ->Pre == NULL) L.First = L.Last = NULL; else if (Del ->Pre==NULL){ L.First = L.First ->Next ; L.First ->Pre= NULL; } else  4.3 Danh sách liên kết đôi (tt) } if (Del ->Next ==NULL){ L.Last = L.Last ->Pre ; L.Last ->Next = NULL; } else{ Del ->Pre ->Next = Del ->Next; Del ->Next ->Pre = Del ->Pre ; } del->next=del->pre=NULL; free(del); return 1; 4.3 Danh sách liên kết đơi (tt) 4.3.2.g Hủy tồn danh sách Thực nhiều lần thao tác hủy nút  Thuật toán B1: IF (L.LFirst == NULL) Thực BKT B2: Temp = L.First B3: L.First = L.First ->Next B4: IF (L.First == NULL) B4.1: L.Last = NULL B4.2: Thực B7 B5: L.First ->Pre = NULL B6: Temp ->Next = NULL B7: delete Temp B8: Lặp lại B1 BKT: Kết thúc 4.3 Danh sách liên kết đôi (tt) 4.3.2.g Hủy toàn danh sách (tt)  Cài đặt thuật toán void DeleteList (List &L){ Node* Temp = L.First; while (Temp!= NULL){ L.First = L.First ->Next; Temp ->Next = NULL; if (L.First != NULL) L.First ->Pre = NULL; delete Temp; Temp=L.First; } } 4.3 Danh sách liên kết đôi (tt) 4.3.2.h Tạo danh sách mới/Nhập danh sách  Thuật toán B1: Khoitao(L) B2: i= B3: IF (i >N) Thực BKT B4: X = Nhapgiatri(); B5: Themcuoi(L, X) B6: i++ B7: Lặp lại B3 BKT: Kết thúc 4.3 Danh sách liên kết đôi (tt) 4.3.2.h Tạo danh sách mới/Nhập danh sách Cài đặt thuật toán void CreateList(List &L, int n) { init(L); int X; for (int i=1; i Key < Jnode ->Pre->Key) Swap(Jnode->Key,Jnode->Pre->Key) Jnode = Jnode ->Pre ; } Inode = Inode ->Next ; } return; }  4.3 Danh sách liên kết đôi (tt) 4.3.2.l Sao chép danh sách thành danh sách Thuật toán B1: KhoitaoDS(NewList) B2: P = L.First B3: IF (P == NULL) Thực BKT B4: Themcuoi(NewList, P->Key) B5: P = P ->Next B6: Lặp lại B3 BKT: Kết thúc 4.3 Danh sách liên kết đôi (tt) 4.3.2.l Sao chép danh sách thành danh sách  Cài đặt thuật toán List DLLCopy(List &L, List &NewList) { KhoitaoDS(NewList); Node* P = L.First; while (P!= NULL) { if (Themcuoi(NewList, P->Key) == NULL) { XoaDS(NewList); break; } P= P ->Next ; } return (NewList); } Danh sách liên kết 4.4 Ưu nhược điểm danh sách liên kết  Nhược điểm ◦ Mật độ sử dụng nhớ danh sách liên kết không tối ưu tuyệt đối (

Ngày đăng: 27/06/2014, 15:20

Mục lục

  • Môn: CẤU TRÚC DỮ LIỆU

  • 4. Danh sách liên kết (Linked List)

  • 4. Danh sách liên kết (tt)

  • 4.2. Danh sách liên kết đơn (SLL)

  • 4.2. Danh sách liên kết đơn (tt)

  • DANH SÁCH LIÊN KẾT ĐÔI (KÉP) (DOUBLE LINKED LIST)

  • 4.3. Danh sách liên kết đôi (DLL)

  • 4.3. Danh sách liên kết đôi (tt)

  • 4. Danh sách liên kết

Tài liệu cùng người dùng

Tài liệu liên quan