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

Bài giảng Cấu trúc dữ liệu và giải thuật: Bài 5 - Hoàng Thị Điệp

28 2 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 28
Dung lượng 260,55 KB

Nội dung

Bài 3 Cấu trúc dữ liệu biểu diễn danh sách (P3) Bài 5 Danh sách liên kết Giảng viên Hoàng Thị Điệp Khoa Công nghệ Thông tin – Đại học Công Nghệ HK I, 2012 2013 3 cách để liên kết dữ liệu • Mảng tập hợ[.]

HK I, 2012-2013 Bài 5: Danh sách liên kết Giảng viên: Hồng Thị Điệp Khoa Cơng nghệ Thơng tin – Đại học Công Nghệ cách để liên kết liệu • Mảng: tập hợp phần tử kiểu • struct/class: tập hợp thành phần có kiểu (có thể) khác • Con trỏ diepht@vnu INT2203/w05 Các KDLTT học • KDLTT danh sách • KDLTT tập động – Phép tốn • • • • • • – Phép tốn insert delete append at length empty • • • • • • • – Cài đặt – Cài đặt • mảng tĩnh • mảng động diepht@vnu insert delete search max empty length • mảng động khơng • mảng động INT2203/w05 Nhận xét • Độ phức tạp cài đặt danh sách mảng – – – – truy cập: getElement(A, i) cập nhật: update(A, i) xen thêm giá trị x: insert(A, i, x) xóa bớt: del(A, i) • Danh sách liên kết giúp insert del hiệu diepht@vnu INT2203/w05 KDLTT danh sách • Cài mảng – at: O(1) – insert: O(N) – delete: O(N) diepht@vnu • Cài danh sách liên kết INT2203/w05 So sánh Mảng Giống Khác diepht@vnu Danh sách liên kết Các phần tử có kiểu có thứ tự Bố cục logic giống với bố cục vật lý nhớ máy tính INT2203/w05 Bố cục logic khơng cần phải giống với bố cục vật lý Khái niệm • DSLK tạo thành từ nút – nút gồm phần • phần liệu: chứa phần tử liệu • phần trỏ: chứa địa – nút liên kết với thông qua trỏ liệu Nội Bài diepht@vnu trỏ liệu trỏ Đà Nẵng INT2203/w05 [dữ liệu] [con trỏ] liệu trỏ Tân Sơn Nhất  DSLK C++ • Mỗi nút biến Node • Nút cuối có giá trị next NULL • Xác định DSLK địa nút danh sách – gọi biến lưu địa trỏ đầu head – khởi tạo danh sách rỗng: struct Node{ Item data; Node * next; }; Node * head = NULL; head Nội Bài diepht@vnu Đà Nẵng INT2203/w05 Tân Sơn Nhất  DSLK C++ struct Node{ Item data; Node * next; }; Node * head; Node * tail; • Có thể sử dụng thêm trỏ tail để thao tác DSLK thuận lợi – danh sách rỗng head = tail = NULL; head tail Nội Bài diepht@vnu Đà Nẵng INT2203/w05 Tân Sơn Nhất  typedef int Item; struct Node{ Item data; Node * next; }; struct SList{ Node * head; Node * tail; long size; SList(); ~SList(); Node* findPrevious(Node* p); Node* addFirst(const Item& v); Node* addLast(const Item& v); Node* insertAfter(Node* p, const Item& v); Node* insertBefore(Node* p, const Item& v); void removeFirst(); void remove(Node*& p); void print(); }; diepht@vnu INT2203/w05 10 Thêm vào sau nút p p head tail Đà Nẵng Nội Bài Nội Bài  tail p head diepht@vnu Tân Sơn Nhất Cam Ranh Đà Nẵng INT2203/w05 x Tân Sơn Nhất  14 insertAfter(p, v) Algorithm insertAfter(p, v) Input liệu v cần thêm vào sau nút p danh sách Output q new Node() {tạo nút mới} (*q).data  v {nút chứa liệu v} (*q).next  (*p).next {nút chứa trỏ đến nút sau p} (*p).next  q {nút p chứa trỏ đến nút mới} size  size + {tăng biến đếm nút} cập nhật tail Nội Bài diepht@vnu tail p head Cam Ranh Đà Nẵng INT2203/w05 x Tân Sơn Nhất  15 Thêm vào trước nút p p head Nội Bài head Đà Nẵng Tân Sơn Nhất p Phú Bài Nội Bài diepht@vnu tail x Đà Nẵng INT2203/w05  tail Tân Sơn Nhất  16 insertBefore(p, v) Algorithm insertBefore(p, v) Input liệu v cần thêm vào trước nút p danh sách Output if p = head then addFirst(v) else tìm nút pre liền trước p insertAfter(pre, v) head Nội Bài diepht@vnu p Phú Bài x Đà Nẵng INT2203/w05 tail Tân Sơn Nhất  17 Thêm vào cuối danh sách tail head Nội Bài Đà Nẵng Tân Sơn Nhất tail  Phú Quốc x head  Nội Bài diepht@vnu Đà Nẵng Tân Sơn Nhất INT2203/w05 18 addLast(v) Algorithm addLast(v) Input liệu v cần thêm vào cuối danh sách Output q new Node() {tạo nút mới} (*q).data  v {nút chứa liệu v} {nút chứa trỏ NULL} (*q).next  NULL (*tail).next  q {nút tail cũ chứa trỏ đến nút mới} {tail trỏ đến nút mới} tail  q size  size + {tăng biến đếm nút} tail head Nội Bài diepht@vnu Đà Nẵng  Phú Quốc Tân Sơn Nhất INT2203/w05 19 Xóa nút đầu danh sách tail head Nội Bài Đà Nẵng Tân Sơn Nhất  Tân Sơn Nhất  tail head x Nội Bài diepht@vnu Đà Nẵng INT2203/w05 20 removeFirst() Algorithm removeFirst() Input Output if head = null then báo lỗi: danh sách rỗng t  head head  (*head).next {trỏ head đến nút sau nó} delete t {giải phóng vùng nhớ trỏ head cũ} {giảm biến đếm nút} size  size - cập nhật tail tail head x Nội Bài diepht@vnu Đà Nẵng Tân Sơn Nhất INT2203/w05  21 Xóa nút khơng phải đầu danh sách p head tail Đà Nẵng Nội Bài Tân Sơn Nhất p head  tail x Nội Bài diepht@vnu x Đà Nẵng INT2203/w05 Tân Sơn Nhất  22 remove(p) Algorithm remove(p) Input nút p cần xóa khỏi danh sách Output if p=head then removeFirst() else tìm nút pre liền trước p {pre chứa trỏ đến nút sau p} (*pre).next (*p).next delete p {giải phóng vùng nhớ trỏ p} size  size - {giảm biến đếm nút} cập nhật tail p head tail x Nội Bài diepht@vnu x Đà Nẵng INT2203/w05 Tân Sơn Nhất  23 Các dạng DSLK • DSLK đơn – singly linked list, uni-directional list, one-way list • DSLK kép – doubly linked list, bi-directional list • DSLK vịng trịn – ring list diepht@vnu INT2203/w05 24 tail head  Nội Bài Đà Nẵng  tail head Nội Bài diepht@vnu Tân Sơn Nhất Đà Nẵng INT2203/w05 Tân Sơn Nhất 25 Cài đặt danh sách DSLK • Sinh viên tự nghiên cứu chương 5.4, 5.5 diepht@vnu INT2203/w05 26 Câu hỏi • Hãy mơ tả cấu trúc DSLK định nghĩa đoạn mã sau typedef struct Node ListNode; struct Node{ int data; ListNode *next; } typedef struct Node ListNode; struct Node{ int data; ListNode* next; } typedef struct FirstNode *LinkedList; struct FirstNode{ ListNode *first; } typedef struct FirstNode* LinkedList; struct FirstNode{ ListNode* first; } diepht@vnu INT2203/w05 27 Chuẩn bị tới • Đọc chương 6, giáo trình diepht@vnu INT2203/w05 28

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

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

TÀI LIỆU LIÊN QUAN