1. Trang chủ
  2. » Giáo án - Bài giảng

cấu trúc dữ liệu danh sách liên kết linked list

45 191 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 45
Dung lượng 291,89 KB

Nội dung

tài liệu uy tín được biên soạn bởi giảng viên đại học Bách Khoa TPHCM, thuận lợi cho qua trình tự học, nghiên cứu bộ tự động hóa, điện tử, cơ điện tử, cơ khí chế tạo máy, lập trình nhúng, Tài liệu được kiểm duyệt bởi giảng viên, phòng đào tạo trường đại học bách khoa, lưu hành nội bộ

Chương Danh sách liên kết (Buổi 6, 7) Nội dung Danh sách liên kết đơn (singly-linked list) tác vụ ™ Danh sách liên kết vòng (circularly-linked list) tác vụ ™ Trường Đại học Bách Khoa Tp.HCM Khoa Khoa học Kỹ thuật Máy tính © 2015 NGUYỄN TRUNG TRỰC Cấu trúc liệu Giải thuật Chương Danh sách liên kết Danh sách liên kết Phần giới thiệu loại thứ hai danh sách tuyến tính danh sách liên kết (linked list), bao gồm: ™ Danh sách liên kết đơn (singly-linked list) tác vụ ™ Danh sách liên kết vòng (circularly-linked list) tác vụ Trường Đại học Bách Khoa Tp.HCM Khoa Khoa học Kỹ thuật Máy tính © 2015 NGUYỄN TRUNG TRỰC Cấu trúc liệu Giải thuật Chương Danh sách liên kết Danh sách liên kết 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 đa liên kết Hình 4.1 Các loại danh sách liên kết Trường Đại học Bách Khoa Tp.HCM Khoa Khoa học Kỹ thuật Máy tính © 2015 NGUYỄN TRUNG TRỰC Cấu trúc liệu Giải thuật Chương Danh sách liên kết Danh sách liên kết ™ Các tác vụ danh sách liên kết f f f f f f f f Khởi tạo danh sách rỗng Thêm phần tử vào danh sách Tìm kiếm phần tử danh sách Loại bỏ phần tử danh sách Lấy nội dung phần tử Duyệt danh sách Kiểm tra danh sách rỗng Hủy bỏ danh sách Trường Đại học Bách Khoa Tp.HCM Khoa Khoa học Kỹ thuật Máy tính © 2015 NGUYỄN TRUNG TRỰC Cấu trúc liệu Giải thuật Chương Danh sách liên kết Định nghĩa danh sách liên kết ™ Danh sách liên kết (linked list) danh sách mà phần tử nối kết với dựa vào vùng liên kết chúng: vùng liên kết phần tử chứa tham chiếu đến phần tử ai+1 Trường Đại học Bách Khoa Tp.HCM Khoa Khoa học Kỹ thuật Máy tính © 2015 NGUYỄN TRUNG TRỰC Cấu trúc liệu Giải thuật Chương Danh sách liên kết Định nghĩa danh sách liên kết item Info_1 … Info_n Link (a) Nội dung phần tử gồm vùng tin item Info_1 … Info_n Link (b) Nội dung phần tử cấu trúc Hình 4.2 Phần tử danh sách liên kết Trường Đại học Bách Khoa Tp.HCM Khoa Khoa học Kỹ thuật Máy tính © 2015 NGUYỄN TRUNG TRỰC Cấu trúc liệu Giải thuật Chương Danh sách liên kết Định nghĩa danh sách liên kết first Nhân Lễ Trí Tín null Hình 4.3 Danh sách liên kết – Cấu trúc first Trường Đại học Bách Khoa Tp.HCM Khoa Khoa học Kỹ thuật Máy tính © 2015 NGUYỄN TRUNG TRỰC Cấu trúc liệu Giải thuật Chương Danh sách liên kết Cấu trúc liệu ™ Item Mỗi phần tử có hai phần: f Info: chứa thơng tin phần tử, là: vùng tin (field), cấu trúc (structure) f Link: chứa tham chiếu đến phần tử danh sách Trường Đại học Bách Khoa Tp.HCM Khoa Khoa học Kỹ thuật Máy tính © 2015 NGUYỄN TRUNG TRỰC Cấu trúc liệu Giải thuật Chương Danh sách liên kết Cấu trúc liệu #include using namespace std; struct Item; typedef Item* ref; struct Item { int Info; ref Link; }; int main() { ref first; return 0; } Trường Đại học Bách Khoa Tp.HCM Khoa Khoa học Kỹ thuật Máy tính © 2015 NGUYỄN TRUNG TRỰC Cấu trúc liệu Giải thuật Chương Danh sách liên kết 10 Các tác vụ danh sách head khơng vòng void Remove(ref head, int x) // Tìm, bỏ x danh sách head chưa có thứ tự { ref = head; ref p = head->Link; bool found = false; while ((p != NULL) && ! found) if (p->Info == x) found = true; else { = p; p = p->Link; } if (found) { tp->Link = p->Link; delete p; // Loại bỏ p } } Trường Đại học Bách Khoa Tp.HCM Khoa Khoa học Kỹ thuật Máy tính © 2015 NGUYỄN TRUNG TRỰC Cấu trúc liệu Giải thuật Chương Danh sách liên kết 31 Các tác vụ danh sách head không vòng void RemoveOrder(ref head, int x) // Tìm bỏ x danh sách head có thứ tự tăng dần { ref = head; ref p = head->Link; bool found = false; while ((p != NULL) && ! found) if (p->Info < x) { = p; p = p->Link; } else if (p->Info == x) found = true; else p = NULL; if (found) { tp->Link = p->Link; delete p; // Loại bỏ p } } Trường Đại học Bách Khoa Tp.HCM Khoa Khoa học Kỹ thuật Máy tính © 2015 NGUYỄN TRUNG TRỰC Cấu trúc liệu Giải thuật Chương Danh sách liên kết 32 Các tác vụ danh sách head không vòng void Display(ref head) // Duyệt danh sách head { ref p = head->Link; while (p != NULL) { cout Info Link; while (p != NULL) { head->Link = p->Link; delete p; p = head->Link; } } Trường Đại học Bách Khoa Tp.HCM Khoa Khoa học Kỹ thuật Máy tính © 2015 NGUYỄN TRUNG TRỰC Cấu trúc liệu Giải thuật Chương Danh sách liên kết 34 Danh sách liên kết head vòng Head Nhân Lễ Trí Tín Hình 4.5 Danh sách liên kết – Cấu trúc head vòng Trường Đại học Bách Khoa Tp.HCM Khoa Khoa học Kỹ thuật Máy tính © 2015 NGUYỄN TRUNG TRỰC Cấu trúc liệu Giải thuật Chương Danh sách liên kết 35 Cấu trúc liệu #include using namespace std; struct Item; typedef Item* ref; struct Item { int Info; ref Link; }; int main() { ref head; return 0; } Trường Đại học Bách Khoa Tp.HCM Khoa Khoa học Kỹ thuật Máy tính © 2015 NGUYỄN TRUNG TRỰC Cấu trúc liệu Giải thuật Chương Danh sách liên kết 36 Các tác vụ danh sách head vòng void InitHead(ref& head) // Tạo danh sách head rỗng { head = new Item; head->Link = head; } bool IsEmpty(ref head) // Kiểm tra danh sách head rỗng { bool kq = head->Link == head; return kq; } Trường Đại học Bách Khoa Tp.HCM Khoa Khoa học Kỹ thuật Máy tính © 2015 NGUYỄN TRUNG TRỰC Cấu trúc liệu Giải thuật Chương Danh sách liên kết 37 Các tác vụ danh sách head vòng void InsertHead(ref head, int x) // Thêm x vào đầu danh sách head { ref p = new Item; p->Info = x; p->Link = head->Link; head->Link = p; } Trường Đại học Bách Khoa Tp.HCM Khoa Khoa học Kỹ thuật Máy tính © 2015 NGUYỄN TRUNG TRỰC Cấu trúc liệu Giải thuật Chương Danh sách liên kết 38 Các tác vụ danh sách head vòng void InsertOrder(ref head, int x) // Thêm x vào danh sách head có thứ tự tăng dần { ref = head; ref p = head->Link; bool cont = true; while ((p != head) && cont) if (p->Info < x) { = p; p = p->Link; } else cont = false; ref q = new Item; q->Info = x; q->Link = p; tp->Link = q; } Trường Đại học Bách Khoa Tp.HCM Khoa Khoa học Kỹ thuật Máy tính © 2015 NGUYỄN TRUNG TRỰC Cấu trúc liệu Giải thuật Chương Danh sách liên kết 39 Các tác vụ danh sách head vòng ref Find(ref head, int x) // Tìm x danh sách head chưa có thứ tự // Trả địa phần tử tìm thấy { ref p = head->Link;; bool found = false; while ((p != head) && ! found) if (p->Info == x) found = true; else p = p->Link; return p; } Trường Đại học Bách Khoa Tp.HCM Khoa Khoa học Kỹ thuật Máy tính © 2015 NGUYỄN TRUNG TRỰC Cấu trúc liệu Giải thuật Chương Danh sách liên kết 40 Các tác vụ danh sách head vòng ref FindOrder(ref head, int x) // Tìm x danh sách head có thứ tự tăng dần { ref p = head->Link; bool found = false; while ((p != head) && ! found) if (p->Info < x) p = p->Link; else if (p->Info == x) found = true; else p = head; return p; } Trường Đại học Bách Khoa Tp.HCM Khoa Khoa học Kỹ thuật Máy tính © 2015 NGUYỄN TRUNG TRỰC Cấu trúc liệu Giải thuật Chương Danh sách liên kết 41 Các tác vụ danh sách head vòng void Remove(ref head, int x) // Tìm bỏ x danh sách head chưa có thứ tự { ref = head; ref p = head->Link; bool found = false; while ((p != head) && ! found) if (p->Info == x) found = true; else { = p; p = p->Link; } if (found) { tp->Link = p->Link; delete p; } } Trường Đại học Bách Khoa Tp.HCM Khoa Khoa học Kỹ thuật Máy tính © 2015 NGUYỄN TRUNG TRỰC Cấu trúc liệu Giải thuật Chương Danh sách liên kết 42 Các tác vụ danh sách head vòng void RemoveOrder(ref head, int x) // Tìm bỏ x danh sách head có thứ tự tăng dần { ref = head; ref p = head->Link; bool found = false; while ((p != head) && ! found) if (p->Info < x) { = p; p = p->Link; } else if (p->Info == x) found = true; else p = head; if (found) { tp->Link = p->Link; delete p; } } Trường Đại học Bách Khoa Tp.HCM Khoa Khoa học Kỹ thuật Máy tính © 2015 NGUYỄN TRUNG TRỰC Cấu trúc liệu Giải thuật Chương Danh sách liên kết 43 Các tác vụ danh sách head vòng void Display(ref head) // Duyệt danh sách head { ref p = head->Link; while (p != head) { cout Info Link; while (p != head) { head->Link = p->Link; delete p; p = head->Link; } } Trường Đại học Bách Khoa Tp.HCM Khoa Khoa học Kỹ thuật Máy tính © 2015 NGUYỄN TRUNG TRỰC Cấu trúc liệu Giải thuật Chương Danh sách liên kết 45

Ngày đăng: 03/02/2018, 08:23

TỪ KHÓA LIÊN QUAN