Bài giảng Cấu trúc dữ liệu và giải thuật - Bài 4: KDLTT danh sách cài đặt bằng mảng tĩnh

pdf 11 trang Đức Chiến 04/01/2024 1880
Bạn đang xem tài liệu "Bài giảng Cấu trúc dữ liệu và giải thuật - Bài 4: KDLTT danh sách cài đặt bằng mảng tĩnh", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_cau_truc_du_lieu_va_giai_thuat_bai_4_kdltt_danh_sa.pdf

Nội dung text: Bài giảng Cấu trúc dữ liệu và giải thuật - Bài 4: KDLTT danh sách cài đặt bằng mảng tĩnh

  1. Bài 4: KDLTT danh sách cài đặt bằng mảng tĩnh Giảng viên: Hoàng Thị Điệp Khoa Công nghệ Thông tin – Đại học Công Nghệ Cấu trúc dữ liệu và giải thuật HKI, 2013-2014
  2. Nội dung chính  KDLTT danh sách: đặc tả  Cài đặt bằng mảng tĩnh 2 diepht@vnu
  3. Danh sách  Danh sách là cấu trúc dữ liệu tuyến tính, trong đó các phần tử dữ liệu được sắp xếp theo một thứ tự xác định  Danh sách thuần nhất: các phần tử cùng một kiểu  Ví dụ  Danh sách sinh viên  Danh sách điện thoại  Danh sách môn học  Danh sách bài hát  Danh sách công việc 3 diepht@vnu
  4. Trừu tượng hóa danh sách 1. Đặc tả dữ liệu  Là một dãy hữu hạn các phần tử L = (a0, a1, , an-1) 2. Đặc tả các phép toán  Kiểm tra danh sách có rỗng hay không  Đếm số phần tử của danh sách  Trả về phần tử ở vị trí thứ i của danh sách  Thêm phần tử x vào vị trí i trong danh sách  Thêm phần tử x vào đuôi danh sách  Loại phần tử ở vị trí thứ i trong danh sách  Ta muốn thiết kế lớp danh sách để người lập trình dùng lớp này có thể biểu diễn danh sách các phần tử có kiểu tùy ý  Generic programming  Template trong C++ 4 diepht@vnu
  5. Trừu tượng hóa danh sách 1. Đặc tả dữ liệu L = (a0, a1, , an-1) trong đó ai là phần tử thứ i+1 của danh sách L Ví dụ: L = (1, 2, 3, 3, 4, 5) L = (‘Vinh’, ‘Tuấn’, ‘Ánh’) 2. Đặc tả các phép toán  Kiểm tra danh sách có rỗng hay không: empty(L)  Đếm số phần tử của danh sách: length(L)  Trả về phần tử ở vị trí thứ i của danh sách: element(L, i)  Thêm phần tử x vào vị trí i trong danh sách: insert(L, i, x)  Thêm phần tử x vào đuôi danh sách: append(L, x)  Loại phần tử ở vị trí thứ i trong danh sách: erase(L, i) 5 diepht@vnu
  6. Ví dụ  L = (1, 2, 3, 3, 4, 5)  empty(L) → false  length(L) → 6  element(L, 0) → 1  element(L, 2) → 3  insert(L, 2, 10) → L = (1, 2, 10, 3, 3, 4, 5)  append(L, -5) → L = (1, 2, 10, 3, 3, 4, 5, -5)  erase(L, 3) → L = (1, 2, 10, 3, 4, 5, -5)  erase(L, 1) → L = (1, 10, 3, 4, 5, -5) 6 diepht@vnu
  7. Cài đặt danh sách bằng mảng  Mảng (array)  Tập hợp các phần tử (các biến) có cùng một kiểu  Một phần tử cụ thể trong mảng sẽ được xác định và truy cập bởi một chỉ số  Trong C/C++, các phần tử của mảng được đặt cạnh nhau tạo thành một khối liên tục. Địa chỉ thấp nhất tương ứng với phần tử đầu tiên, địa chỉ cao nhất tương ứng với phần tử cuối cùng  Mảng thì có thể là một chiều hoặc nhiều chiều 7 diepht@vnu
  8. Cài đặt danh sách bằng mảng  Mảng một chiều tĩnh int dayso[100]; Phanso dayphanso[15];  Mảng một chiều động  Cấp phát bộ nhớ bằng phép new int *daysod = new int[100]; Phanso *dayphansod = new Phanso[15];  Khi không dùng nữa, phải giải phóng bộ nhớ bằng phép delete delete [] daysod; delete [] dayphansod;  L = (a0, a1, , an-1) a0 a1 an-1 ? ? 0 1 n-1 n MAX-1 8 diepht@vnu
  9. insert(L, i, x) a0 ai-1 ai an-1 ? ? ? 0 i-1 i n-1 n n+1 MAX-1 a0 ai-1 x ai an-1 ? ? 0 i-1 i i+1 n n+1 MAX-1  Dồn tất cả các phần tử từ vị trí i tới vị trí n-1 về sau một vị trí  Sau đó đặt giá trị x vào vị trí i  Tăng số phần tử của danh sách lên 1 9 diepht@vnu
  10. erase(L, i) a0 ai-1 ai ai+1 an-1 ? ? 0 i-1 i i+1 n-1 n MAX-1 a0 ai-1 ai+1 an-1 ? ? ? 0 i-1 i n-2 n-1 n MAX-1  Dồn tất cả các phần tử từ vị trí i+1 tới vị trí n-1 lên trước một vị trí  Giảm số phần tử của danh sách đi 1 10 diepht@vnu
  11. Chuẩn bị tuần tới  Thực hành: Cài đặt KDLTT danh sách bằng mảng tĩnh  Lý thuyết: Đọc chương 4 (4.3 đến hết) và chương 5 giáo trình 11 diepht@vnu