Bài giảng Cơ sở dữ liệu giải thuật: Bài 4 - Cấu trúc dữ liệu biểu diễn danh sách (Phần 2) giới thiệu thư viện khuôn mẫu chuẩn STL, cài đặt danh sách bằng mảng C++, bộ ba quan trọng, hàm insert, append của Dlist; ứng dụng KDLTT danh sách.
Bài 4: Cấu trúc liệu biểu diễn danh sách (P2) Giảng viên: Hồng Thị Điệp Khoa Cơng nghệ Thơng tin – Đại học Công Nghệ Giới thiệu thư viện khn mẫu chuẩn STL • • • • • • diepht@vnu • • • • • Ôn tập • Con trỏ nhớ động • Bộ công cụ lặp diepht@vnu Cài đặt danh sách mảng C++ Cấp phát tĩnh template class List{ public: static const int MAX = 50; // private: Item element[MAX]; int last; }; diepht@vnu Cấp phát động template class Dlist{ public: // private: Item * element; int size; int last; }; Bộ ba quan trọng Dlist có thành phần liệu cấp phát động nên phải cài đặt ba • Hàm kiến tạo chép • Tốn tử gán • Hàm hủy diepht@vnu Hàm insert, append Dlist • A = (1, 3, 4, 8); size = 4; last = • insert(A, 3, 50) cũ 8 4 50 50 diepht@vnu A = (1, 3, 4, 50, 8); size = 8; last = Hàm insert, append Dlist Khi mảng đầy • Cấp phát động mảng có cỡ gấp đơi mảng cũ • Chép đoạn đầu mảng cũ sang mảng • Đưa phần tử cần xen vào mảng • Chép đoạn cịn lại mảng cũ sang mảng • Hủy mảng cũ • Cập nhật size, last Viết mã C++! diepht@vnu Ứng dụng KDLTT danh sách • Tập động – Mỗi phần tử có thành phần khóa phân biệt Các giá trị khóa có quan hệ thứ tự – Các phép toán: isEmpty, insert, del, seach, getMax, getMin – Ví dụ: ((“An”, 1985), (“Bình”, 1986), (“Cường, 1985), (“Dung”, 1987)) – Cài danh sách hay khơng tốt hơn? diepht@vnu KDLTT tập động diepht@vnu Ứng dụng KDLTT danh sách • Đa thức – Ví dụ: ((17,5), (-25, 2), (14, 1), (-32, 0)) biểu diễn đa thức 17x5 – 25x2 + 14x – 32 – Các phép toán: cộng, trừ, nhân diepht@vnu 10 Ứng dụng KDLTT danh sách • Ma trận thưa – Ma trận chứa số phần tử khác – Cách biểu diễn: • Xem ma trận danh sách dịng • Mỗi dòng danh sách biểu diễn phần tử khác • Mỗi phần tử khác cặp (chỉ số cột, giá trị) – Ví dụ: (((2, 7), (5, 3)), ((3, 8)), (), ((2, 5), (4, 9))) – Các phép tốn ma trận, dịng, phần tử diepht@vnu 11 Tìm kiếm nhị phân Algorithm binarySearch(x, A, first, last): search keyword x and array A of Items with two ends marked by indexes first and last Output: true if x in A, false otherwise if first > last then return false mid (first + last) / if x = A[mid].key then return true else if x < A[mid].key then binarySearch(x, A, first, mid - 1) else binarySearch(x, A, mid + 1, last) Input: diepht@vnu 12 Tìm kiếm nhị phân A 11 số A = (1, 3, 4, 6, 8, 9, 11); x = search(x, A) • binarySearch(x, A, first, last) • binarySearch(x, A, 0, 6) – So x với A[3] x nhỏ • binarySearch(x, A, 0, 2) – So x với A[1] x lớn • binarySearch(x, A, 2, 2) – So x với A[2] Bằng Trả true diepht@vnu 13 Chuẩn bị tới • Đọc chương giáo trình diepht@vnu INT2203/w04 14 ... – Cài danh sách hay khơng tốt hơn? diepht@vnu KDLTT tập động diepht@vnu Ứng dụng KDLTT danh sách • Đa thức – Ví dụ: ((17,5), (-2 5, 2), ( 14, 1), (-3 2, 0)) biểu diễn đa thức 17x5 – 25x2 + 14x –... nhân diepht@vnu 10 Ứng dụng KDLTT danh sách • Ma trận thưa – Ma trận chứa số phần tử khác – Cách biểu diễn: • Xem ma trận danh sách dịng • Mỗi dịng danh sách biểu diễn phần tử khác • Mỗi phần tử... thành phần liệu cấp phát động nên phải cài đặt ba • Hàm kiến tạo chép • Tốn tử gán • Hàm hủy diepht@vnu Hàm insert, append Dlist • A = (1, 3, 4, 8); size = 4; last = • insert(A, 3, 50) cũ 8 4 50 50