1. Trang chủ
  2. » Công Nghệ Thông Tin

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

85 909 3

Đ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

Cấu trú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)

  • Slide 5

  • Slide 6

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

  • Slide 8

  • Slide 9

  • Slide 10

  • Slide 11

  • Slide 12

  • Slide 13

  • Slide 14

  • Slide 15

  • Slide 16

  • Slide 17

  • Slide 18

  • Slide 19

  • Slide 20

  • Slide 21

  • Slide 22

  • Slide 23

  • Slide 24

  • Slide 25

  • Slide 26

  • Slide 27

  • Slide 28

  • Slide 29

  • Slide 30

  • Slide 31

  • Slide 32

  • Slide 33

  • Slide 34

  • Slide 35

  • Slide 36

  • Slide 37

  • Slide 38

  • Slide 39

  • Slide 40

  • Slide 41

  • Slide 42

  • Slide 43

  • Slide 44

  • Slide 45

  • Slide 46

  • Slide 47

  • Slide 48

  • Slide 49

  • 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)

  • Slide 53

  • Slide 54

  • Slide 55

  • Slide 56

  • Slide 57

  • Slide 58

  • Slide 59

  • Slide 60

  • Slide 61

  • Slide 62

  • Slide 63

  • Slide 64

  • Slide 65

  • Slide 66

  • Slide 67

  • Slide 68

  • Slide 69

  • Slide 70

  • Slide 71

  • Slide 72

  • Slide 73

  • Slide 74

  • Slide 75

  • Slide 76

  • Slide 77

  • Slide 78

  • Slide 79

  • Slide 80

  • Slide 81

  • Slide 82

  • Slide 83

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

  • Slide 85

Nội dung

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

TỪ KHÓA LIÊN QUAN