1. Trang chủ
  2. » Luận Văn - Báo Cáo

Bài giảng Danh sách liên kết - ĐH Tôn Đức Thắng

59 1 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 59
Dung lượng 1,88 MB

Nội dung

Danh sách liên kết 1 Giới thiệu Các loại danh sách liên kết Các thao tác trên danh sách So sánh các thực thi của danh sách So sánh danh sách liên kết và mảng 2  Tập có thứ tự  Số lượng phần tử cố đị[.]

Danh sách liên kết Giới thiệu Các loại danh sách liên kết Các thao tác danh sách So sánh thực thi danh sách So sánh danh sách liên kết mảng Giới thiệu Mảng: Cấu trúc liệu quen thuộc  Tập có thứ tự  Số lượng phần tử cố định (tĩnh)  Cấp phát vùng nhớ liên tục  Truy xuất phần tử thông qua số Giới thiệu Đánh giá thao tác mảng:  Truy xuất phần tử ?  Cập nhật ?  Chèn phần tử ?  Xóa phần tử ? Giới thiệu Thực tế:  không xác định xác số lượng phần tử  Danh sách bệnh nhân tăng/giảm  Danh sách sinh viên tăng/giảm  Vùng nhớ thay đổi q trình sử dụng Khơng đủ vùng nhớ cấp phát liên tục ? Cấu trúc liệu động đáp ứng nhu cầu Khái Niệm danh sách liên kết  Danh sách liên kết tập liệu mà phần tử(element) chứa vị trí phần tử  element = data + link  Ví dụ: Các loại danh sách liên kết  Danh sách liên kết đơn  Danh sách liên kết kép  Danh sách liên kết vòng Danh sách liên kết đơn  Mỗi phần tử có liên kết đến phần tử phía sau Danh sách liên kết kép  Mỗi phần tử có hai liên phần tử đứng trước sau Danh sách liên kết vịng  Là danh sách liên kết đơn có mối liên kết phần tử cuối phần tử đầu Phần tử danh sách liên kết  Phần tử = liệu + liên kết  10 Remove Node from a Linked List (cont.)  There is no difference between  Removal a node from the middle (a) and removal a node from the end (b) of the list head (a) pPre->link = pDel->link Recycle pDel pDel pPre … X head pPre pDel pPre pDel … (b) head … X 45 Remove Node from a Linked List (cont.)  There is no difference between  removal the node from the beginning (a) of the list and removal the only-remained node in the list (b) (a) head X pDel … (b) head head = pDel->link pDel 46 Recycle pDel head pDel RemoveNode Algorithm Remove (ref DataOut ) Removes a node from a singly linked list Pre DataOut contains the key need to be removed Post If the key is found, DataOut will contain the data corresponding to it, and that node has been removed from the list; otherwise, list remains unchanged Return success or failed 47 RemoveNode Algorithm (cont.) Remove (ref DataOut ) Allocate pPre, pDel // pPre remains NULL if the node to be deleted is at the beginning of the list or is the only node if (pDel is not found) return failed else DataOut = pDel->data if (pPre = NULL) // Remove the first node or the only node head = pDel->link else // Remove the node in the middle or at the end of the list pPre->link = pDel->link recycle pDel return success end Remove 48 Các thao tác danh sách liên kết đơn  Xóa nút đầu DS  Trước xóa (2) 15 Count 99 pHead pCurr (1) L.pHead = pCurr pNext; delete pCurr;  Sau xóa 99 Count 11/1/2016 pHead Bộ mơn KHMT - Khoa CNTT - Trường ĐH Tôn Đức Thắng 49 Các thao tác danh sách liên kết đơn  Xóa nút đầu DS (ql trỏ đầu)  Nếu pHead != NULL Lấy nút đầu DS (pCurr) để xóa  Tách pCurr khỏi danh sách  Delete pCurr Void DeleteFirst(LIST &L) { NODE *pCurr; if(L.pHead != NULL) { pCurr = L.pHead; L.pHead = L.pHead pNext;// L.pHead=pCurr->pNext delete pCurr; } } Bộ môn KHMT - Khoa CNTT - Trường ĐH Tôn  11/1/2016 Đức Thắng 50 Các thao tác danh sách liên kết đơn  Xóa nút đầu DS (ql trỏ đầu cuối)  Nếu pHead != NULL Lấy nút đầu DS (pCurr) để xóa  Tách nút đầu DS (pCurr) khỏi danh sách  Delete pCurr  Nếu pHead = NULL pTail = NULL: Xâu rỗng  Void DeleteFirst(LIST &L) { NODE *pCurr; if(L.pHead != NULL) { pCurr = L.pHead; L.pHead = L.pHead pNext; delete pCurr; } if(L.pHead == NULL) L.pTail = NULL; } Bộ môn KHMT - Khoa CNTT - Trường ĐH Tôn 11/1/2016 Đức Thắng 51 Các thao tác danh sách liên kết đơn  Xóa nút DS Sau nút pRev (ql trỏ đầu)  Trước xóa 15 Count 50 99 pHead pPrev pCurr pPrev  pNext = pCurr  pNext Delete pCurr  Sau xóa 15 Count 99 pHead pPrev 11/1/2016 Bộ môn KHMT - Khoa CNTT - Trường ĐH Tôn Đức Thắng 52 Các thao tác danh sách liên kết đơn  Xóa nút DS Sau nút pRev (ql trỏ đầu) Void DeleteAfter_pPrev(LIST & L, NODE * pPrev) { NODE * pCurr; pCurr = pPrev  pNext;// lấy nút sau pPrev để xóa pPrev  pNext =pCurr  pNext; delete pCurr; } 11/1/2016 Bộ môn KHMT - Khoa CNTT - Trường ĐH Tôn Đức Thắng 53 Các thao tác danh sách liên kết đơn  Xóa nút DS Sau nút pRev (ql trỏ đầu cuối) Int DeleteAfter_pPrev(LIST & L, NODE * pPrev) { NODE * pCurr; if(pPrev == L.pTail) return 0; pCurr = pPrev  pNext; pPrev  pNext =pCurr  pNext; delete pCurr; if(pPrev pNext == NULL) L.pTail = pPrev; } 11/1/2016 Bộ môn KHMT - Khoa CNTT - Trường ĐH Tôn Đức Thắng 54 Các thao tác danh sách liên kết đơn  Xóa nút DS ( tổng quát)  void DeleteNode(LIST & L, NODE * pPrev, NODE * PCurr) { if(pPrev == NULL) // xóa nút đầu L.pHead =pCurr  pNext; else // Xóa nút pPrev pNext =pCurrpNext; delete pCurr; L.count ; } 11/1/2016 Bộ môn KHMT - Khoa CNTT - Trường ĐH Tôn Đức Thắng 55 Các thao tác danh sách liên kết đơn  Duyệt DSLK Đơn: từ đầu DSLK cuối DSLK  Để từ đầu DSLK đến cuối DSLK ta sử dụng biến trỏ NODE để giữ địa NODE DSLK void PrintList( LIST L) { NODE * pCurr = L.pHead; while( pCurr != NULL) { cout

Ngày đăng: 29/06/2023, 05:00

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN