Để dùng danh sách liên kết, xét hai khai báo sau(cần 1KB để lưu dữ thông tin về một sinh viên). (Với “thongtin” là một thành phần dữ liệu của cấu trúc); Chọn câu đúng nhất trong các câu sau: 1. Khai báo 1: struct SV { thongtin; struct SV * tiep; }; 2. Khai báo 2: struct SV { thongtin }; struct DS { struct SV * sv; struct DS * tiep; };
Trả lời:
Đáp án đúng: B
Phân tích:
* **Khai báo 1:** Định nghĩa một cấu trúc `SV` chứa thông tin sinh viên (`thongtin`) và một con trỏ `tiep` trỏ đến phần tử tiếp theo trong danh sách. Đây là cách triển khai danh sách liên kết đơn giản.
* **Khai báo 2:** Định nghĩa hai cấu trúc: `SV` chỉ chứa thông tin sinh viên và `DS` chứa một con trỏ `sv` trỏ đến một sinh viên và một con trỏ `tiep` trỏ đến phần tử tiếp theo trong danh sách.
Đánh giá các phương án:
* **A. Khai báo 1 tốn nhiều bộ nhớ hơn khai báo 2:** Sai. Khai báo 2 tốn nhiều bộ nhớ hơn vì mỗi nút trong danh sách liên kết (cấu trúc `DS`) chứa một con trỏ đến sinh viên (cấu trúc `SV`) và một con trỏ đến nút tiếp theo. Trong khi khai báo 1, mỗi nút (cấu trúc `SV`) chỉ chứa trực tiếp thông tin sinh viên và con trỏ đến nút tiếp theo.
* **B. Khai báo 2 sẽ giúp chương trình chạy nhanh hơn khi đổi vị trí 2 sinh viên:** Sai. Việc đổi vị trí hai sinh viên trong danh sách liên kết yêu cầu thay đổi các con trỏ, và tốc độ không phụ thuộc vào việc sử dụng khai báo 1 hay khai báo 2.
* **C. Khai báo 1 sẽ giúp tiết kiệm câu lệnh hơn khi viết hàm đổi vị trí 2 sinh viên:** Đúng. Với khai báo 1, việc đổi vị trí hai sinh viên chỉ cần thao tác trên các con trỏ `tiep` của các nút `SV`. Với khai báo 2, cần thao tác trên các con trỏ `tiep` của các nút `DS` và có thể cần thao tác trên các con trỏ `sv` nếu cần thay đổi thông tin sinh viên được trỏ tới.
* **D. Khai báo 2 sẽ giúp chương trình chạy nhanh hơn khi duyệt danh sách:** Sai. Tốc độ duyệt danh sách liên kết phụ thuộc vào số lượng phần tử và hiệu năng của hệ thống, không phụ thuộc vào cách khai báo cấu trúc.
Vậy đáp án đúng là C.





