Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 7: Danh sách liên kết
lượt xem 6
download
Bài giảng "Cấu trúc dữ liệu và giải thuật trong C++ - Bài 7: Danh sách liên kết" cung cấp cho người học các kiến thức: Vấn đề của Mảng, danh sách liên kết, cấu trúc của một Node, cấu trúc danh sách liên kết đơn,... Mời các bạn cùng tham khảo nội dung chi tiết.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 7: Danh sách liên kết
- Bài 7 Danh sách liên kết (Linked List) 1
- Vấn đề của Mảng Xét lại vấn đề sử dụng mảng để tạo danh sách : Thêm phần tử : O(n) Xoá phần tử : O(n) Số phần tử mảng cố định!!! 2
- Vấn đề của Mảng Làm sao có thể thêm (hay xoá) một phần tử mà không phải di chuyển các phần tủ khác? Làm sao để danh sách “động” hơn? Cần dùng một cấu trúc lưu trữ mới với các yêu cầu Các phần tử phải được tách rời ra Và được nối với nhau bằng “dây liên kết” Khi thêm phần tử chỉ cần thay đổi mối đây liên kết chi phí xử lý sẽ thấp hơn 3
- DANH SÁCH LIÊN KẾT Mô hình cấu trúc dữ liệu trừu tượng Linked List là một dãy các vị trí lữu trữ các đối tượng với số lượng tùy ý. Nó thiết lập một mối quan hệ trước/sau giữa các vị trí Danh sách liên kết đơn Danh sách liên kết kép 4
- Danh sách liên kết đơn Các nút (node) được cài đặt bao gồm: next Phần tử lưu trữ trong nó Một liên kết đến nút kế tiếp Sử dụng môt con trỏ header, trỏ vào node đầu danh sách và con trỏ elem node trailer trỏ vào node cuối danh sách. trailer header node NULL elem 5
- Cấu trúc của một Node Các thuộc tính Element *elem; Node *next; Các phương thức Node *getnext() - Trả lại địa chỉ của nút kế tiếp Element *getElem() - Trả lại địa chỉ của phần tử mà nút trỏ tới trong nút void setNext(Node *) - Đặt thuộc tính next trỏ đến đ/c phần tử là đối của phương thức void setElem(Element e) - Đặt phần tử e vào nút 6
- Cấu trúc danh sách liên kết đơn Các thuộc tính: Các phương thức cập nhật: Node *header void replace(Node *p, Element e) Node *trailer Node *insertAfter(Node *p, Element e) Các phương thức Node * insertFirst(Element e) chung: Node * insertLast(Element e) long size(), Node * getNode(int i) int isEmpty() void remove(Node *p) Các phương thức truy cập: Node *first() Node *last() 7
- Insertion First Hình ảnh phép toán insertFirst(), phép toán trả lại vị trí q trailer header NULL A B C trailer header NULL A B C X q trailer header NULL X A B C 8
- Insertion Last Hình ảnh phép toán insertLast(), phép toán trả lại vị trí q trailer header NULL A B C trailer header NULL C NULL A B X q trailer header NULL A B C X 9
- Insertion After Hình ảnh phép toán insertAfter(p, X), phép toán trả lại vị trí q trailer header p NULL A B C trailer header NULL A B C X trailer header NULL A B X C 10
- Remove Hình ảnh phép toán remove(p) trailer header p NULL A B X C trailer header p A B C X NULL trailer header NULL A B C 11
- Bài tập về nhà Xây dựng lớp ứng dụng sử dụng lớp Danh sách liên kết đơn để lưu trữ 1 danh sách sinh viên. Mỗi sinh viên gồm các thông tin sau: MaSv, Hoten, Ngay, Thang, Nam sinh, gioi tinh, que quan. Lớp có các chức năng sau: -Thêm một sinh viên vào cuối DS - Thêm một sinh viên vào đầu DS - Xóa bỏ một sinh viên thu i khỏi DS - Thay thế sinh viên thứ i bằng một sinh viên mới Xây dựng chương trình để chạy lớp ứng dụng 12
- Danh sách liên kết kép Các nút (node) được cài đặt bao gồm: prev next Phần tử lưu trữ trong nó Một liên kết đến nút trước nó Một liên kết đến nút kế tiếp Có hai nút đặc biệt là trailer và elem header n header node trailer Elem 13
- Cấu trúc của một Node Các thuộc tính • Element *elem; • Node *next, *pre; Các phương thức • Node *getnext() - Trả lại địa chỉ của nút kế tiếp • Node *getPre() - Trả lại địa chỉ của nút trước đó • Element *getElem() - Trả lại địa chỉ của phần tử lưu trong nút • void setNext(Node *) - Đặt thuộc tính Next trỏ đến đ/c của phần tử là đối của phương thức • void setPre(Node *) - Đặt thuộc tính Prior trỏ đến đ/c của phần tử là đối của phương thức • void setElem(Element e) - Đặt phần tử e vào nút 14
- Cấu trúc Danh sách liên kết kép Các thuộc tính: Các phương thức cập nhật: Node *header void replace(Node *p, e) Node *trailer Node *insertAfter(Node *p, Elemnt e) Các phương thức Node *insertBefore(Node *p, Element e) chung: Node * insertFirst(Element e) long size(), Node * insertLast(Element e) int isEmpty() Node * getNode(int i) Các phương thức void remove(Node *p) truy cập: Node *first() Node *last() 15
- Insert First Hình ảnh phép toán insertFirst(X), phép toán trả lại vị trí q header trailer A B C header trailer q A B C X header q p trailer X A B C 16
- Insert Last Hình ảnh phép toán insertLast( X), phép toán trả lại vị trí q header trailer A B C header trailer A B C q X header q trailer A B C X 17
- Insert After Hình ảnh phép toán insertAfter(p, X), phép toán trả lại vị trí q p A B C p A B q C X p q A B X C 18
- Thuật toán Insert After Algorithm insertAfter(p,e): //Bổ sung phần tử e vào sau // phần tử nút p Tạo ra một nút mới q q->setElement(e) //Đặt gia trị e vào nút q q->setNext(p->getNext())//liên kết với phần tử sau nó p.getNext()->setPrev(q)//Liên kết phần tử sau p với q q->setPrev(p) //liên kết q với phần tử trước nó p->setNext(q) //liên kết p với q return q //trả lại vị trí của q 19
- Insert Before Hình ảnh phép toán insertBefore(p, X), phép toán trả lại vị trí q header p trailer A B C header p trailer A q B C X header p q trailer A X B C 20
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Cấu trúc dữ liệu - Bài 1:Tổng quan về cấu trúc dữ liệu và giải thuật
47 p | 175 | 17
-
Bài giảng Cấu trúc dữ liệu 1: Chương 1 - Lương Trần Hy Hiến
7 p | 162 | 9
-
Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 8: Cấu trúc dữ liệu ngăn xếp
28 p | 77 | 9
-
Bài giảng Cấu trúc dữ liệu giải thuật: Các kiểu dữ liệu trừu tượng cơ bản - Cấu trúc dữ liệu tuyến tính
92 p | 116 | 9
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây đỏ đen - Bùi Tiến Lên
25 p | 81 | 8
-
Bài giảng Cấu trúc dữ liệu và giải thuật – Bài 17: Cấu trúc dữ liệu dạng cây
21 p | 77 | 8
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Các cấu trúc dữ liệu
193 p | 59 | 7
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 - Trần Minh Thái (2016)
62 p | 94 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 - Trần Minh Thái (Trường Đại học Hồng Bàng )
62 p | 159 | 6
-
Bài giảng Cấu trúc dữ liệu - Chương 3: Cấu trúc cây
65 p | 58 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây AA - Bùi Tiến Lên
30 p | 35 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 – Trần Minh Thái (2017)
67 p | 106 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây - Bùi Tiến Lên
68 p | 40 | 4
-
Bài giảng Cấu trúc dữ liệu: Chương 1 - ThS. Thiều Quang Trung (2018)
44 p | 43 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây AVL - Bùi Tiến Lên
38 p | 47 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 5 - Ngô Quang Thạch
24 p | 58 | 3
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 2 - Th.S Thiều Quang Trung
41 p | 68 | 3
-
Bài giảng Cấu trúc dữ liệu giải thuật: Cấu trúc dữ liệu
17 p | 50 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn