Bài giảng Kỹ thuật lập trình: Danh sách liên kết - Nguyễn Minh Huy
lượt xem 3
download
Bài giảng Kỹ thuật lập trình: Danh sách liên kết, được biên soạn gồm các nội dung chính sau khái niệm danh sách liên kết; Các thao tác trên danh sách đơn; Cải tiến danh sách liên kết đơn. Mời các bạn cùng tham khảo!
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Kỹ thuật lập trình: Danh sách liên kết - Nguyễn Minh Huy
- Danh sách liên kết GV. Nguyễn Minh Huy Kỹ thuật lập trình - Nguyễn Minh Huy 1
- Nội dung Khái niệm danh sách liên kết. kết. Các thao tác trên danh sách đơn. đơn. Cải tiến danh sách liên kết đơn. đơn. Kỹ thuật lập trình - Nguyễn Minh Huy 2
- Nội dung Khái niệm danh sách liên kết. kết. Các thao tác trên danh sách đơn. đơn. Cải tiến danh sách liên kết đơn. đơn. Kỹ thuật lập trình - Nguyễn Minh Huy 3
- Khái niệm danh sách liên kết Nhận xét về mảng một chiều: chiều: Tính chất: chất: Các phần tử liên tiếp nhau trong bộ nhớ. nhớ. Kích thước bộ nhớ không co dãn. dãn. a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 a ? ? ? ? ? ? ? ? ? ? Ưu điểm: điểm: Truy xuất phần tử bằng chỉ số nhanh. nhanh. Thuận tiện lưu số lượng phần tử cố định. định. Khuyết điểm: điểm: Thêm, Thêm, xóa phần tử không thuận tiện. tiện. Thay đổi kích thước phải cấp lại bộ nhớ. nhớ. Tìm vùng nhớ lớn liên tiếp nhau không dễ. dễ. Kỹ thuật lập trình - Nguyễn Minh Huy 4
- Khái niệm danh sách liên kết Giải pháp danh sách liên kết: kết: Bài toán “thuê ngăn tủ đựng đồ”: đồ”: RAM (4GB) 0 Cần thuê N ngăn tủ chứa N đồ vật. vật. Mỗi ngăn tủ chỉ chứa được 1 đồ vật. vật. Giải pháp mảng: mảng: Thuê N ngăn tủ liên tiếp. tiếp. Giữ STT ngăn đầu tiên. tiên. … Giải pháp danh sách liên kết: kết: Thuê N ngăn tủ không liên tiếp. tiếp. Mỗi ngăn chứa: chứa: 1 đồ vật. vật. 232 Mẫu giấy ghi STT ngăn tiếp theo. theo. Giữ STT ngăn tủ đầu tiên. tiên. Kỹ thuật lập trình - Nguyễn Minh Huy 5
- Khái niệm danh sách liên kết Danh sách liên kết đơn: đơn: Một dãy các phần tử không liên tiếp. tiếp. Mỗi phần tử = Dữ liệu + Địa chỉ phần tử kế. kế. Phần tử cuối giữ địa chỉ NULL. Giữ địa chỉ phần tử đầu. đầu. data data data head next next next NULL Khai báo trong C: struct SNode { int data; SNode *next; }; Kỹ thuật lập trình - Nguyễn Minh Huy 6
- Nội dung Khái niệm danh sách liên kết. kết. Các thao tác trên danh sách đơn. đơn. Cải tiến danh sách liên kết đơn. đơn. Kỹ thuật lập trình - Nguyễn Minh Huy 7
- Các thao tác trên danh sách đơn Khởi tạo danh sách: sách: Danh sách rỗng. rỗng. head NULL Kiểm tra danh sách rỗng: rỗng: Kiểm tra head NULL. head NULL ??? Kỹ thuật lập trình - Nguyễn Minh Huy 8
- Các thao tác trên danh sách đơn Tìm phần tử: tử: Phần tử thứ i. Phần tử có dữ liệu x. Phần tử cuối dãy. dãy. Thứ tự i data = x cuối dãy data data data data head next next next next NULL Kỹ thuật lập trình - Nguyễn Minh Huy 9
- Các thao tác trên danh sách đơn Thêm phần tử: tử: Đầu danh sách. sách. Cuối danh sách. sách. Giữa danh sách: sách: Sau phần tử thứ i. Giữ thứ tự. tự. Thêm đầu Thêm giữa Thêm cuối data data data next next next data data data data head next next next next NULL Kỹ thuật lập trình - Nguyễn Minh Huy 10
- Các thao tác trên danh sách đơn Xóa phần tử: tử: Đầu danh sách. sách. Cuối danh sách. sách. Giữa danh sách: sách: Sau phần tử i. Phần tử có dữ liệu x. Xóa cả danh sách. sách. data data data data head next next next next NULL Kỹ thuật lập trình - Nguyễn Minh Huy 11
- Nội dung Khái niệm danh sách liên kết. kết. Các thao tác trên danh sách đơn. đơn. Cải tiến danh sách liên kết đơn. đơn. Kỹ thuật lập trình - Nguyễn Minh Huy 12
- Cải tiến danh sách liên kết đơn Danh sách liên kết vs. Mảng một chiều: chiều: Danh sách liên kết Mảng một chiều Bố trí phần tử Không liên tục Liên tục Giới hạn bộ nhớ Không giới hạn Vùng nhớ liên tục Thay đổi kích thước Tùy ý Cấp phát lại + sao chép Độ phức tạp: O(1) Độ phức tạp: O(n) Truy xuất phần tử Tuần tự Trực tiếp bằng chỉ số. Độ phức tạp: O(n) Độ phức tạp: O(1) Tìm kiếm Tiến Tiến và lùi. Độ phức tạp: O(n) Độ phức tạp: O(n) Thêm/Xóa phần tử Không dời phần tử Phải dời phần tử Độ phức tạp: O(1) Độ phức tạp: O(n) Hao phí bộ nhớ Lưu địa chỉ phần tử kế Không hao phí Hao phí: 4 * n bytes Kỹ thuật lập trình - Nguyễn Minh Huy 13
- Cải tiến danh sách liên kết đơn Danh sách kép: kép: Danh sách đơn duyệt tiến, không lùi. tiến, lùi. Head: duyệt tiến. tiến. Tail: duyệt lùi. lùi. data data data head next next next NULL NULL prev prev prev tail Khai báo trong C: struct DNode struct DList { { int data; DNode *head; DNode *next; DNode *tail; DNode *prev; prev; }; }; Kỹ thuật lập trình - Nguyễn Minh Huy 14
- Cải tiến danh sách liên kết đơn Danh sách vòng: vòng: Cần duyệt danh sách đơn nhiều lần. lần. Phần tử danh sách vòng giống danh sách đơn. đơn. Phần tử cuối trỏ đến phần tử đầu. đầu. data data data head next next next Khai báo trong C: struct CNode { int data; CNode *next; }; Kỹ thuật lập trình - Nguyễn Minh Huy 15
- Tóm tắt Danh sách liên kết: kết: Phần tử lưu trữ phân tán. tán. Phần tử = dữ liệu + địa chỉ phần tử kế. kế. Phần tử cuối trỏ đến NULL. Các thao tác trên danh sách đơn: đơn: Khởi tạo, kiểm tra rỗng. tạo, rỗng. Tìm, thêm, xóa. Tìm, thêm, xóa. Cải tiến danh sách liên kết đơn: đơn: Danh sách kép. kép. Danh sách vòng. vòng. Kỹ thuật lập trình - Nguyễn Minh Huy 16
- Bài tập Bài tập 8.1: Viết chương trình C cài đặt các thao tác (như trong bài học) trên danh học) sách kép và danh sách vòng. vòng. Kỹ thuật lập trình - Nguyễn Minh Huy 17
- Bài tập Bài tập 8.2: Viết chương trình C cài đặt các thao tác trên danh sách liên kết đơn: đơn: - Đếm số nút trong danh sách. sách. - Đảo ngược danh sách. sách. - Thêm phần tử (giữ nguyên thứ tự). tự). Kỹ thuật lập trình - Nguyễn Minh Huy 18
- Bài tập Bài tập 8.3 (*): Một khuyết điểm của danh sách liên kết so với mảng một chiều là khả năng truy xuất phần tử. tử. Hãy đề xuất một cách cải tiến khả năng truy xuất phần tử của danh sách liên kết sao cho có thể GẦN BẰNG với mảng một chiều. chiều. Kỹ thuật lập trình - Nguyễn Minh Huy 19
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Kỹ thuật lập trình: Chương 1 - Trần Quang
39 p | 10 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 8 - Trần Quang
34 p | 9 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 7 - Trần Quang
28 p | 9 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 6 - Trần Quang
37 p | 12 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 4 - Trần Quang
32 p | 8 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 3 - Trần Quang
52 p | 11 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 2 - Trần Quang
25 p | 10 | 2
-
Bài giảng Kỹ thuật lập trình: Hàm nâng cao (Phần 1) - ThS. Đặng Bình Phương
26 p | 0 | 0
-
Bài giảng Kỹ thuật lập trình: Các kỹ thuật thao tác trên bit - ThS. Đặng Bình Phương
29 p | 1 | 0
-
Bài giảng Kỹ thuật lập trình: Tập tin - ThS. Đặng Bình Phương
48 p | 3 | 0
-
Bài giảng Kỹ thuật lập trình: Kỹ thuật lập trình đệ quy - ThS. Đặng Bình Phương
44 p | 1 | 0
-
Bài giảng Kỹ thuật lập trình: Dữ liệu kiểu cấu trúc - ThS. Đặng Bình Phương
33 p | 2 | 0
-
Bài giảng Kỹ thuật lập trình: Chuỗi ký tự - ThS. Đặng Bình Phương
20 p | 2 | 0
-
Bài giảng Kỹ thuật lập trình: Danh sách liên kết - ThS. Đặng Bình Phương
20 p | 2 | 0
-
Bài giảng Kỹ thuật lập trình: Chuyển đổi kiểu dữ liệu và cấp phát bộ nhớ động - ThS. Đặng Bình Phương
28 p | 3 | 0
-
Bài giảng Kỹ thuật lập trình: Dữ liệu kiểu con trỏ (Nâng cao) - ThS. Đặng Bình Phương
48 p | 0 | 0
-
Bài giảng Kỹ thuật lập trình: Giới thiệu môn học - ThS. Đặng Bình Phương
7 p | 1 | 0
-
Bài giảng Kỹ thuật lập trình: Hàm nâng cao (Phần 2) - ThS. Đặng Bình Phương
30 p | 0 | 0
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn