Bài giảng Cấu trúc dữ liệu và giải thuật - Cấu trúc dữ liệu mảng với danh sách liên kết cung cấp cho người đọc các kiến thức về kiểu dữ liệu mảng, ứng dụng của mảng, kiểu dữ liệu mảng, danh sách liên kết,... Mời các bạn cùng tham khảo.
CẤU TRÚC DỮ LIỆU MẢNG VS DANH SÁCH LIÊN KẾT CuuDuongThanCong.com Bùi Tiến Lên 01/01/2017 https://fb.com/tailieudientucntt CuuDuongThanCong.com MẢNG https://fb.com/tailieudientucntt Kiểu liệu mảng Định nghĩa Mảng (array) tập hợp phần tử X = {x0 , , xn } tổ chức tuyến tính Các phần tử xi lưu trữ liên tiếp Các phần tử xi truy xuất thông qua số CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm Kiểu liệu mảng (cont.) Ưu điểm kiểu liệu mảng Đơn giản Xử lý nhanh Bộ nhớ lưu trữ liên tục Số lượng phần tử tương đối cố định CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm Ứng dụng mảng Kiểu liệu mảng phù hợp với đối tượng vector, hay ma trận Do đó, phù hợp với ứng dụng tốn học CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm Thêm phần tử vào mảng Di chuyển phần tử phía sau vị trí Sau chèn phần tử vào Vậy chi phí O(n) CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm Thêm phần tử vào mảng (cont.) Chương trình 1: Hàm thêm phần tử x vào mảng a có n phần tử vị trí k void Insert (int a[], int &n, int x, int k) { for (int i = n; i > k; i ) a[i] = a[i - 1]; a[k] = x; n++; } CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm Minh họa Ví dụ Một mảng a có phần tử a = {1, 2, 4, 3, 8, 5}, chèn phần tử vào vị trí có số mảng a Dời phần tử từ số sang phải đơn vị 4 Gán giá trị vào phần tử có số CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm Minh họa Ví dụ Một mảng a có phần tử a = {1, 2, 4, 3, 8, 5}, chèn phần tử vào vị trí có số mảng a Dời phần tử từ số sang phải đơn vị 4 Gán giá trị vào phần tử có số CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm Minh họa Ví dụ Một mảng a có phần tử a = {1, 2, 4, 3, 8, 5}, chèn phần tử vào vị trí có số mảng a Dời phần tử từ số sang phải đơn vị 4 Gán giá trị vào phần tử có số CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm Danh sách liên kết đơn (cont.) Kiểu liệu cho nút danh sách liên kết đơn template struct Node { T data; int key; Node *next; }; CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 19 Danh sách liên kết đơn (cont.) Cài đặt lớp cho danh sách liên kết 10 11 12 13 template class LinkedList { private : int size; Node *head; }; public : isEmpty ( ) ; insert ( ); remove ( ); search ( ); CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 20 Danh sách liên kết đơn (cont.) Tóm lại, thao tác danh sách liên kết đơn cần có Khởi tạo danh sách rỗng Sao chép danh sách Thêm nút Xóa nút Tìm nút CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 21 Minh họa thao tác Khởi tạo danh sách head = NULL; Thêm nút q → sau nút p → danh sách p A q D B C q->next = p->next; p->next = q; p CuuDuongThanCong.com Spring 2017 A D B https://fb.com/tailieudientucntt Data structure & Algorithm C 22 Minh họa thao tác (cont.) Xóa nút sau nút p → danh sách p A B C q = p->next; p->next = q->next; delete q; p CuuDuongThanCong.com Spring 2017 A C https://fb.com/tailieudientucntt Data structure & Algorithm 23 Danh sách liên kết vòng Định nghĩa Danh sách liên kết vòng (singly linked list) tập hợp tuyến tính phần tử {x0 → x1 → → xn−1 → x0 } Mỗi nút có trỏ liên kết để trỏ đến nút danh sách Trong danh sách khơng có nút nút cuối Cần lưu trữ trỏ liên kết tới phần tử danh sách Danh sách liên kết vòng sử dụng nút danh sách liên kết đơn CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 24 Danh sách liên kết vòng (cont.) Cài đặt lớp cho danh sách liên kết vòng 10 11 12 13 template class LinkedList { private : int size; Node *head; }; public : isEmpty ( ) ; insert ( ); remove ( ); search ( ); CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 25 Danh sách liên kết vòng (cont.) Minh họa danh sách liên kết vòng first A B C D Phần tử A B Phần tử D A Con trỏ first trỏ đến A CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 26 Danh sách liên kết đôi Định nghĩa Danh sách liên kết đôi (doubly linked list) tập hợp tuyến tính phần tử {x0 ↔ x1 ↔ ↔ xn−1 } Mỗi nút có hai trỏ liên kết để trỏ đến nút phía sau nút phía trước nút Nút trỏ nút trước null Nút cuối trỏ nút sau null Cần lưu trữ trỏ liên kết tới phần tử đầu danh sách CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 27 Danh sách liên kết đôi (cont.) Khai báo kiểu liệu nút cho danh sách liên kết đôi template struct Node { T data; int key; Node *prev; Note *next; }; CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 28 Danh sách liên kết đôi (cont.) Cài đặt lớp cho danh sách liên kết vòng 10 11 12 13 template class LinkedList { private : int size; Node *head; }; public : isEmpty ( ) ; insert ( ); remove ( ); search ( ); CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 29 Danh sách liên kết đôi (cont.) Minh họa danh sách liên kết đôi head A B C D E Phần tử A Phần tử cuối E Phần tử sau B C Phần tử trước B A CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 30 Minh họa số thao tác Khởi tạo danh sách rỗng head = NULL; Thêm phần tử q → vào sau phần tử p → danh sách (giả sử p trỏ tới B) head q A B C D q->prev = p; q->next = p->next; q->next ->prev = q; q->prev ->next = q; CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 31 Đánh giá Mảng vs Danh sách liên kết Bảng 1: Bảng đánh giá Mảng Kích thước tương đối cố định Các phần tử lưu trữ nhớ Sử dụng nhớ Truy xuất ngẫu nhiên (nhanh) CuuDuongThanCong.com Spring 2017 Danh sách liên kết Kích thước thay đổi liên tục Các phần tử lưu trữ rời rạc, liên kết với trỏ Sử dụng nhiều nhớ Truy xuất (chậm) https://fb.com/tailieudientucntt Data structure & Algorithm 32 Tài liệu tham khảo CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 33 ... Algorithm 17 Danh sách liên kết đơn Định nghĩa Danh sách liên kết đơn (singly linked list) tập hợp tuyến tính phần tử {x0 → x1 → → xn−1 } Mỗi nút liên kết đến nút danh sách Nút cuối danh sách không... trỏ liên kết tới phần tử danh sách Danh sách liên kết vòng sử dụng nút danh sách liên kết đơn CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 24 Danh. .. Cần liên kết tới nút đầu danh sách CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 18 Danh sách liên kết đơn (cont.) Kiểu liệu cho nút danh sách liên