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

Chapter 3.3 Doublelist Cấu Trúc Dữ Liệu Và Giải Thuật

48 133 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 48
Dung lượng 490,23 KB

Nội dung

Cấu Trúc Dữ Liệu Và Giải Thuật Chapter 3.3 Doublelist 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

Danh sách liên kết đôi Mục tiêu  Khái niệm DSLK đôi  Biểu diễn, quản lý DSLK đôi  Các thao tác DSLK đôi  Sao chép DSLK đôi  Sắp xếp DSLK đôi Khái niệm  Mỡi phần tử có mối liên kết với phần tử khác danh sách A B C D pTail pHead Previous data Next Biểu diễn, quản lý DSLK đôi  Cấu trúc nút: struct DNode { T data; DNode * Next; DNode * Prev; }; Khai báo: Node *p;  Quản lý danh sách liên kết đôi: struct DList { DNode* pHead; DNode* pTail; }; Khai báo: DList l; Các thao tác DSLK đôi Tạo danh sách rỗng 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 3.1 Khởi tạo danh sách Tḥt tốn: • Đầu vào: Danh sách cần khởi tạo • Đầu ra: Danh sách sau khởi tạo B1: Gán trỏ pHead = NULL B2: Gán trỏ pTail = NULL BKT: Kết thúc ; Cài đặt thuật toán: void KhoiTao(DList &l) { l.pHead = NULL; l.pTail = NULL; } 3.2 Tạo nút Tḥt tốn: • Đầu vào: Phần tử dữ liệu x • Đầu ra: Nút p chứa dữ liệu x B1: p = new DNode ;//cấp phát nhớ cho trỏ p B2: IF(p == NULL); // cấp phát không thành công Thực BKT; B3: p->Next = NULL; B4: p->data=x; B5: p->Prev=NULL; BKT: Kết thúc trả trỏ đến nút vừa tạo; 3.2 Tạo nút Cài đặt thuật toán: DNode* TaoNut (T x) { Node *p; p = malloc (sizeof (DNode)); if (p != NULL) { p ->Next = NULL; p ->data = x; p ->Prev = NULL; } return (p); } 3.3 Thêm nú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 nút q bất kỳ 3.3 Thêm phần tử vào danh sách Thêm vào đầu danh sách 10 Bài tập ứng dụng Bài tập 7: Mở rộng chương trình vừa viết: - Bổ sung thêm thao tác xóa phần tử ở đầu danh sách - Chương trình chính:  Tạo danh sách n số nguyên  Hiển thị danh sách tạo hình  Xóa phần tử cuối danh sách hiển thị danh sách sau xóa hình 34 3.6 Xóa phần tử danh sách Tḥt tốn xóa phần tử có khóa k • Đầu vào: Danh sách l, khóa k • Đầu ra: Danh sách sau phần tử có khóa k B1: p = TimKiem(l,k); B2: if p!=NULL then 2.1 if p->Prev == NULL then xóa nút ở đầu ds; 2.2 else if p->Next ==NULL then xóa nút cuối ds; 2.3 else + p->Prev->Next = p->Next; + p->Next->Prev = p->Prev; 2.4 free (p) BKT: Kết thúc; 35 3.6 Xóa phần tử danh sách void XoaPhanTu(DList &l, int x){ DNode *p = TimKiem(l, x); if (p!=NULL){ if (p->Prev==NULL) XoaDau(l); else if (p->Next==NULL) XoaCuoi(l); else{ p->Prev->Next = p->Next; p->Next->Prev = p->Prev; p->Prev = NULL; p->Next = NULL; } free(p); } 36 Bài tập ứng dụng Bài tập 8: Mở rộng chương trình vừa viết: - Bổ sung thêm thao tác xóa phần tử có khóa k - Chương trình chính:  Tạo danh sách n số nguyên  Hiển thị danh sách tạo hình  Nhập vào giá trị x cần xóa bất kỳ, tìm kiếm xem có tồn tại nút chứa giá trị x danh sách Nếu tìm thấy xóa x khỏi danh sách 37 3.6 Hủy danh sách  Thực nhiều lần thao tác hủy nút B1: if (l.pHead == NULL) Thực BKT; B2: p = l.pHead; B3: l.pHead = l.pHead ->Next ; B4: if (L.pHead == NULL) 4.1: l.pTail = NULL; 4.2: Thực B7; B5: L.pHead ->Prev = NULL; B6: p->Next = NULL; B7: delete p; B8: Lặp lại B1; BKT: Kết thúc 38 3.6 Xóa phần tử danh sách Cài đặt: void HuyDS(DList &l){ DNode *p; while (l.pHead!=NULL){ p = l.pHead; l.pHead = l.pHead->Next; free(p); } } 39 Bài tập ứng dụng Bài tập 10: Mở rộng chương trình vừa viết: - Bổ sung thêm thao tác hủy danh sách - Chương trình chính:  Tạo danh sách n số nguyên  Kiểm tra thao tác thêm phần tử vào sau nút q  Xóa phần tử có khóa k  Hủy danh sách sau trước kết thúc chương trình 40 3.9 Sao chép danh sách Tḥt tốn xóa phần tử có khóa k • Đầu vào: Danh sách l1 • Đầu ra: Danh sách l2 chép từ l1 B1: KhoitaoDS (l2) B2: p = l1.pHead B3: if (p == NULL) Thực BKT; B4: NewNode = TaoNut(p->data); B5: Themcuoi(l2, NewNode); B5: p = p ->Next B6: Lặp lại B3; BKT: Kết thúc; 41 4.3 Danh sách liên kết đôi (tt) void CopyDS(DList l1, DList &l2){ DNode *p = l1.pHead; while (p!=NULL){ DNode *NewNode = TaoNut(p->data); ChenCuoi(l2,NewNode); p = p->Next; } } 42 Bài tập ứng dụng Bài tập 11: Mở rộng chương trình vừa viết: - Bổ sung thêm thao tác chép danh sách - Chương trình chính:  Tạo danh sách l1 bao gồm n số nguyên  Sao chép danh sách l1 thành l2  Hiển thị danh sách l2 hình  Hủy danh sách sau trước kết thúc chương trình 43 Sắp xếp DSLK đôi 44 Sắp xếp DSLK đôi  Phương pháp đổi chỗ trực tiếp  Phương pháp chọn  Phương pháp bọt 45 Đánh giá ưu, nhược điểm 46 Đánh giá, ưu, nhược 4.1 Ư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: 11/04/2019, 17:37

TỪ KHÓA LIÊN QUAN

w