Slide 1 Kỹ thuật lập trình ThS Đặng Bình Phương (dbphuong@fit hcmus edu vn) Danh sách liên kết Hàng đợi Ngăn xếp Đồ án lập trình Các vấn đề tìm hiểu mở rộng kiến thức nghề nghiệp Thuật ngữ và bà[.]
Kỹ thuật lập trình ThS Đặng Bình Phương (dbphuong@fit.hcmus.edu.vn) Danh sách liên kết Hàng đợi Ngăn xếp Đồ án lập trình Các vấn đề tìm hiểu mở rộng kiến thức nghề nghiệp Thuật ngữ đọc thêm tiếng Anh 2/27/2014 Khoa CNTT - ĐH Khoa học tự nhiên • Mối liên hệ phần tử ngầm hiểu – Mỗi phần tử có số ngầm hiểu xi+1 nằm sau xi Do phần tử phải nằm cạnh nhớ – Số lượng phần tử cố định Khơng có thao tác thêm hủy mà có thao tác dời chỗ – Truy xuất ngẫu nhiên đến phần tử nhanh chóng – Phí nhớ khơng biết trước kích thước – Ví dụ: mảng chiều 2/27/2014 Khoa CNTT - ĐH Khoa học tự nhiên • Mối liên hệ phần tử rõ ràng – Mỗi phần tử ngồi thơng tin thân cịn có thêm liên kết (địa chỉ) đến phần tử – Các phần tử không cần phải xếp cạnh nhớ – Việc truy xuất đến phần tử địi hỏi phải thơng qua phần tử khác – Tùy nhu cầu, phần tử liên kết theo nhiều cách khác tạo thành danh sách liên kết đơn, kép, vòng 2/27/2014 Khoa CNTT - ĐH Khoa học tự nhiên • Nhận xét – Số nút không cố định, thay đổi tùy nhu cầu nên cấu trúc động – Thích hợp thực thao tác chèn hủy khơng cần phải dời nút mà cần sửa liên kết cho phù hợp Thời gian thực không phụ thuộc vào số nút danh sách – Tốn nhớ chứa trỏ liên kết pNext – Truy xuất nên thời gian 2/27/2014 Khoa CNTT - ĐH Khoa học tự nhiên pTail A B C D E pHead typedef struct tagNode { Data Info; struct tagNode *pNext; } NODE; typedef struct tagList { NODE *pHead; NODE *pTail; } LIST; 2/27/2014 Khoa CNTT - ĐH Khoa học tự nhiên • Khởi tạo danh sách pHead ? pTail ? • Kiểm danh sách có rỗng hay khơng pHead NULL? pTail 2/27/2014 Khoa CNTT - ĐH Khoa học tự nhiên • Tạo nút X ? ? • Xác định trỏ nút thứ i danh sách – p = pHead – p = p->pNext i lần p != NULL return lại trỏ p • Xác định vị trí nút p danh sách – Tương tự trả lại vị trí 2/27/2014 Khoa CNTT - ĐH Khoa học tự nhiên • Chèn nút vào đầu danh sách pTail – Danh sách rỗng pHead X – Danh sách không rỗng X A pTail B C D E pHead 2/27/2014 Khoa CNTT - ĐH Khoa học tự nhiên 10 • Khái niệm – Làm việc theo FIFO (First In First Out) pHead (Front) A B C D pTail (Rear) 2/27/2014 Khoa CNTT - ĐH Khoa học tự nhiên 19 • • • • • • Lưu trữ Kiểm tra rỗng hay không Thêm phần tử (vào cuối) Lấy phần tử (ở đầu) Lấy kích thước Lấy thơng tin phần tử (ở đầu) 2/27/2014 Khoa CNTT - ĐH Khoa học tự nhiên 20 ... pHead 2/27/2 014 Khoa CNTT - ĐH Khoa học tự nhiên 11 • Thêm nút vào sau nút q – q == NULL khơng làm cả! – q != NULL q X A B C pTail D E pHead 2/27/2 014 Khoa CNTT - ĐH Khoa học tự nhiên 12 • Thêm... 2/27/2 014 Khoa CNTT - ĐH Khoa học tự nhiên 14 • Hủy nút sau nút q – q == NULL không làm cả! – q != NULL q pTail A B C D E pHead p = q->pNext 2/27/2 014 Khoa CNTT - ĐH Khoa học tự nhiên 15 • Hủy... nút 2/27/2 014 Khoa CNTT - ĐH Khoa học tự nhiên 16 • Danh sách liên kết đơn có thứ tự • Danh sách liên kết kép • Danh sách liên kết vòng 2/27/2 014 Khoa CNTT - ĐH Khoa học tự nhiên 17 • Khái niệm