Nội dung chính tin học 11 theo định hướng khoa học máy tính cánh diều Chủ đề F(CS) Bài 15: Cấu trúc dữ liệu danh sách liên kết và ứng dụng

Hệ thống kiến thức trọng tâm Chủ đề F(CS) Bài 15: Cấu trúc dữ liệu danh sách liên kết và ứng dụng sách tin học 11 theo định hướng khoa học máy tính cánh diều. Với các ý rõ ràng, nội dung mạch lạc, đi thẳng vào vấn đề hi vọng người đọc sẽ nắm trọn kiến thức trong thời gian rất ngắn. Nội dung chính được tóm tắt ngắn gọn sẽ giúp thầy cô ôn tập củng cố kiến thức cho học sinh. Bộ tài liệu có file tải về. Mời thầy cô kéo xuống tham khảo

Xem: => Giáo án tin học 11 theo định hướng khoa học máy tính cánh diều

BÀI 15. CẤU TRÚC DỮ LIỆU DANH SÁCH LIÊN KẾT VÀ ỨNG DỤNG

1. CẤU TRÚC DANH SÁCH LIÊN KẾT

- Danh sách liên kết (linked list) là một chuỗi nhiều nút (node) lưu trữ rải rác không liền kề trong bộ nhớ.

- Một nút có hai thành phần:

+ Phần Data chứa dữ liệu;

+ Phần liên kết gọi là Next.

- Phần Next trong một nút là con trỏ Next, kí hiệu mũi tên “→”.

- Về bản chất, kí hiệu mũi tên “→” để thể hiện một kiểu dữ liệu kiểu đặc biệt, gọi là kiểu con trỏ. Cho phép truy cập trực tiếp đến một địa chỉ ô nhớ cụ thể.

- Đuôi danh sách là nút cuối cùng trong danh sách, không có nút nào đứng sau.

+ Được thể hiện bằng hình vẽ Next trỏ đến Null và được hiểu rằng “không trỏ đến đâu cả, không đi tiếp được nữa”.

+ Con trỏ Tail trỏ đến nút đuôi danh sách.

- Đầu danh sách được minh họa bằng mũi tên Head trỏ đến nút đầu tiên trong danh sách.

- Khi lập trình, cần phân biệt một nút với phần Data chứa dữ liệu trong nút đó, phân biệt phần Data với chính dữ liệu trong nút đó.

Sự khác nhau giữa danh sách liên kết và mảng

So với mảng, danh sách liên kết có những điểm khác biệt sau:

- Các nút danh sách liên kết không được lưu trữ thành một khối liên tục liền kề mà có thể nằm rải rác, tách rời nhau trong bộ nhớ.

- Không có chỉ số nên trông truy cập bằng chỉ số được.

- Cần duyệt tuần tự các nút, so sánh dữ liệu chứa trong nút với yêu cầu tìm kiếm đề tìm đúng nút phải truy cập xử lí dữ liệu.

* Phép lặp duyệt tuần tự từng nút của danh sách liên kết sử dụng một con trỏ curr (current) chỉ vào nút đang xét, thực hiện như sau:

+ curr = Head bắt đầu từ Head để truy cập nút A;

+ curr = A.Next để truy cập nút B; curr = B.Next để truy cập nút C;...

+ Kết thúc khi gặp curr = Null tức là tình huống curr = D.Next.

Thêm nút và gỡ bỏ nút

●     Thêm nút có ba trường hợp:

a) Thêm nút vào đầu danh sách

Nút mới thêm thành nút đầu tiên, gọi là E. Thao tác theo hai bước sau:

- Cho E.Next trỏ đến nút A: gán E.Next = Head.

- Cho Head trỏ đến nút E: Head → E.

*Thời gian thực hiện phép thêm nút vào đầu danh sách là O(1), không phụ thuộc độ dài danh sách.

b) Thêm nút vào cuối danh sách

- Nối thêm nút mới vào cuối danh sách, nó trở thành nút cuối cùng.

- Con trỏ Tail trỏ đến nút cuối cùng của danh sách → sửa lại cho Tail trỏ vào E.

* Thời gian thực hiện phép thêm nút vào cuối danh sách là O(1), không phụ thuộc độ dài danh sách.

c) Thêm nút vào giữa danh sách

Tình huống minh họa: curr → B. Thêm nút vào sau nút B.

* Thời gian thực hiện phép thêm nút vào giữa danh sách là O(1), không phụ thuộc độ dài danh sách.

●     Gỡ bỏ nút:

Tình huống minh họa: curr → B. Gỡ bỏ nút sau nút B.

- Ghi lưu con trỏ để truy cập nút C: tmp = B.Next, tức là tmp → C.

- Cho B.Next trỏ đến nút đứng sau C (là nút D): B.Next = C.Next.

- Sử dụng tmp để giải phóng phần bộ nhớ dành cho C.

*Thao tác gỡ bỏ nút đầu danh sách hay cuối danh sách chỉ khác chút ít. Thời gian thực hiện gỡ bỏ là O(1), không phụ thuộc vào độ dài danh sách.

Danh sách liên kết kép

- Nếu mỗi nút có thêm một con trỏ nữa là Prev trỏ đến nút đứng kề ngay trước thì ta sẽ có danh sách nối kép.

Thời gian thực hiện các phép toán của danh sách liên kết

- Phép tìm kiếm: Tìm nút chứa dữ liệu X (Data = X) để xử lí. Phải thực hiện tìm kiếm tuần tự từ đầu danh sách.

→ Độ phức tạp của phép tìm kiếm là O(n) với n là số nút của danh sách.

- Các thao tác thêm nút, gỡ bỏ nút của danh sách liên kết dù ở bất cứ vị trí nào thì thời gian thực hiện đều là O(1).

→ Điểm ưu việt hơn danh sách mảng.

- Danh sách liên kết tốn thêm chỗ để lưu trữ thành phần Next.

→ Đây là nhược điểm so với danh sách mảng.

2. MỘT SỐ KIỂU DANH SÁCH ĐẶC BIỆT VÀ ỨNG DỤNG CỦA DANH SÁCH LIÊN KẾT

- Sử dụng cấu trúc móc nối để liên kết các nút thành một dãy tuần tự tạo ra kiểu danh sách rất linh hoạt.

- Danh sách liên phát huy ưu điểm trong những trường hợp thường xuyên phải:

+ Thêm phần tử, gỡ bỏ phần tử ở bất cứ vị trí nào trong danh sách;

+ Độ dài danh sách thay đổi nhanh và nhiều trong quá trình sử dụng.

Một số ví dụ ứng dụng danh sách liên kết

- Danh sách nhóm đứng đầu top N được cập nhật bằng các thao tác:

+ Gỡ bỏ một số phần tử bị loại khỏi top N; các phần tử này có thể ở bất kì vị trí nào trong top N kì trước.

+ Chèn thêm phần tử mới được xếp vào top N cho kì này vào đúng vị trí theo xếp hàng, có thể là bất kì vị trí nào.

+ Độ dài N của danh sách có các lựa chọn khác nhau, ví dụ là 5, 10, 20,...

- Việc sử dụng danh sách top N cũng rất đa dạng theo nhiều cách khác nhau: phát lại từ bài N – 1 đến 0 hay ngược lại; phát lại theo trình tự ngẫu nhiên;...

=> Giáo án Khoa học máy tính 11 cánh diều Chủ đề F(CS) Bài 15: Cấu trúc dữ liệu danh sách liên kết và ứng dụng

Thông tin tải tài liệu:

Phía trên chỉ là 1 phần, tài liệu khi tải về là file word, có nhiều hơn + đầy đủ đáp án. Xem và tải: Kiến thức trọng tâm tin học 11 theo định hướng khoa học máy tính cánh diều - Tại đây

Tài liệu khác

Tài liệu của bạn

Tài liệu mới cập nhật

Tài liệu môn khác

Chat hỗ trợ
Chat ngay