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 cơ bản - Văn Chí Nam, Nguyễn Thị Hồng Nhung, Đặng Nguyễn Đức Tiến

39 77 0
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 cơ bản - Văn Chí Nam, Nguyễn Thị Hồng Nhung, Đặng Nguyễn Đức Tiến

Đ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

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 cơ bản cung cấp cho người học các kiến thức: Danh sách liên kết, ngăn xếp, hàng đợi, các loại danh sách liên kết, các thao tác trên danh sách liên kết,... Mời các bạn cùng tham khảo.

Giảng viên: Văn Chí Nam – Nguyễn Thị Hồng Nhung – Đặng Nguyễn Đức Tiến Danh sách liên kết Ngăn xếp Hàng đợi Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt Cấu trúc liệu giải thuật – HCMUS 2016  Giới thiệu  Các loại danh sách liên kết  Các thao tác danh sách liên kết  So sánh danh sách liên kết mảng  Ứng dụng Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt  Mảng: cấu trúc liệu quen thuộc  Tập  Số có thứ tự lượng phần tử cố định (tĩnh)  Cấp phát vùng nhớ liên tục xuất phần tử thông qua số  Truy Cấu trúc liệu giải thuật – HCMUS 2016  Đánh giá thao tác mảng: xuất phần tử?  Truy  Cập nhật?  Chèn  Xoá phần tử? phần tử? Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt  Thực tế:  Không xác định xác số lượng phần tử sách bệnh nhân: tăng/giảm  Danh sách sinh viên: tăng/giảm  Danh  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 Cấu trúc liệu giải thuật – HCMUS 2016  Danh sách liên kết đơn    Danh sách liên kết kép    singly linked list uni-directional linked list doubly linked list bi-directional linked list Danh sách liên kết vòng   circularly linked list ring list Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt  Mỗi phần tử có MỘT liên kết đến phần tử phía sau 12 37 99 Cấu trúc liệu giải thuật – HCMUS 2016 10  Mỗi phần tử có HAI liên kết đến phần tử đứng sau trước 12 99 37 Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 11  Có mối liên kết phần tử cuối phần tử đầu 12 37 99 Cấu trúc liệu giải thuật – HCMUS 2016 12  Phần tử (Node, Element)  Phần  Ví tử = Dữ liệu + Liên kết dụ:  Phần tử có liên kết  Phần tử có liên kết  Phần tử rỗng 12 99 Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 13  Ví dụ:  Phần tử có liệu gồm thành phần number  Phần tử có liệu gồm thành phần name id number  Phần tử có liệu gồm cấu trúc name id number Cấu trúc liệu giải thuật – HCMUS 2016 14  Phần cài đặt cho ví dụ Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 15  Mỗi danh sách liên kết bao gồm:  Con trỏ đến phần tử đầu (hoặc/và cuối) danh sách  (Các) phần tử danh sách  Dữ liệu  Các mối liên kết 12 99 37 Cấu trúc liệu giải thuật – HCMUS 2016 16 12 99 37 Head 12 99 37 Head Tail Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 17  Thêm phần tử  Duyệt danh sách  Xoá phần tử  Truy xuất phần tử  Xoá danh sách Cấu trúc liệu giải thuật – HCMUS 2016 18  Vào đầu danh sách  Sau phần tử  Vào cuối danh sách Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 19  Vào đầu danh sách:  Nếu danh sách rỗng  Phần  Ngược tử vừa thêm phần tử đầu danh sách lại, 37 99 12 Head Cấu trúc liệu giải thuật – HCMUS 2016 20  Sau phần tử (Node):  Nếu danh sách rỗng?  Nếu danh sách khác rỗng?  Tạo node có liệu Data  Cập nhật lại liên kết Node node vừa tạo 12 Node X 99 37 Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 10 49  10 * + + * – 18 – / Cấu trúc liệu giải thuật – HCMUS 2016 50 Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 25 51  Mã giả: P biểu thức trung tố ban đầu, Q biểu thức kết dạng hậu tố 0.1 push(‘(‘); 0.2 Thêm ‘)’ vào P while (chưa hết biểu thức P) { đọc kí tự x P (từ trái qua phải) if (x toán hạng) Thêm x vào Q if (x dấu ngoặc mở) push(x); Cấu trúc liệu giải thuật – HCMUS 2016 52  Mã giả: if (x toán tử) 4.1 while( thứ tự ưu tiên đỉnh >= x) 4.1.1 w = pop(); 4.1.2 Thêm w vào Q 4.2 push(x); if (x dấu ngoặc đóng) 5.1 while( chưa gặp ngoặc mở) 4.1.1 w = pop(); 4.1.2 Thêm w vào Q 5.2 pop();//đẩy ngoặc mở khỏi ngăn xếp } Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 26 53  Ví dụ 1: P = ( A + B ) * ( C - ( D + A ) ) Kí tự đọc ( A + B ) * ( C - ( Trạng thái ngăn xếp Q= + + ( ( ( ( ( ( ( ( A ( B + D + A + + ( ( ( ( ) ) - - - - - - ( ( ( ( ( ( ( ( * * * * * * * * * * ( ( ( ( ( ( ( ( ( ( A + - C D * Cấu trúc liệu giải thuật – HCMUS 2016 54  Ví dụ 2: đổi biểu thức trung tố P = A + (B * C – (D / E ^ F) * G) * H sang biểu thức dạng hậu tố Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 27 55      Dùng biến đổi số Lượng giá biểu thức hậu tố Trong trình biên dịch, ngăn xếp sử dụng để lưu môi trường thủ tục Dùng số toán lý thuyết đồ thị Khử đệ qui đuôi Cấu trúc liệu giải thuật – HCMUS 2016 56 Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 28 57    Giới thiệu Các thao tác Ứng dụng Cấu trúc liệu giải thuật – HCMUS 2016 58  Giới thiệu: vật đối tượng làm việc theo qui tắc vào trước trước (FIFO)  Các đối tượng thêm vào hàng đợi lúc có đối tượng thêm vào lấy khỏi hàng đợi  Là Đầu Cuối  Việc thêm vào diễn cuối, việc lấy diễn đầu Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 29 59  Thao tác bản:  Enqueue: Thêm đối tượng vào cuối hàng đợi  Dequeue: Lấy đối tượng đầu khỏi hàng đợi  Thao tác khác:  Lưu trữ hàng đợi  Kiểm tra hàng đợi rỗng  Kiểm tra hàng đợi đầy  Lấy thông tin đối tượng đầu hàng đợi Cấu trúc liệu giải thuật – HCMUS 2016 60  Lưu trữ mảng:  Khai báo mảng chiều với kích thước tối đa N f địa phần tử nằm đầu, r địa phần tử nằm cuối Hàng đợi 6 r=6 f=2 Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 30 61  Lưu trữ mảng:  Các phần tử hàng đợi di chuyển khắp ô nhớ  coi không gian dành cho hàng đợi theo dạng xoay vòng  Hàng đợi xoay vòng: 6 r=2 f=6 Cấu trúc liệu giải thuật – HCMUS 2016 62  Lưu trữ hàng đợi danh sách liên kết đơn  Phần tử đầu DSLK phần tử đầu hàng đợi  Phần tử cuối DSLK phần tử cuối hàng đợi 12 pHead 99 37 pTail Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 31 63  Input:  Output:  TRUE hàng đợi rỗng  FALSE hàng đợi không rỗng  Hàng đợi rỗng:  Mảng: ô nhớ không chứa liệu  DSLK: pHead = NULL Cấu trúc liệu giải thuật – HCMUS 2016 64  Input:  Output:  TRUE hàng đợi đầy  FALSE hàng đợi không đầy  Hàng đợi đầy:  Mảng: ô nhớ cuối hàng đợi chứa liệu  DSLK: không cấp phát vùng nhớ cho phần tử Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 32 65  Input: giá trị cần thêm Output:  Giải thuật thêm phần tử (EnQueue)   Kiểm tra hàng đợi đầy chưa?  Trong trường hợp lưu trữ mảng: kiểm tra điều kiện xoay vòng  Thêm phần tử vào cuối hàng đợi  Cập nhật địa phần tử cuối hàng đợi Cấu trúc liệu giải thuật – HCMUS 2016 66  Ví dụ: Hàng đợi ban đầu 6 r=6 f=2 EnQueue(9) f=2 r=7 Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 33 67  Input: Output: giá trị phần tử đầu hàng đợi  Giải thuật lấy phần tử đầu (DeQueue)   Kiểm tra hàng đợi có rỗng khơng?  Xóa phần tử đầu khỏi hàng đợi  Cập nhật địa phần tử đầu hàng đợi  Trong trường hợp lưu trữ mảng: kiểm tra điều kiện xoay vòng Cấu trúc liệu giải thuật – HCMUS 2016 68  Ví dụ: Hàng đợi ban đầu 6 r=6 f=2 DeQueue() = f=3 r=6 Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 34 69  Chỉ lấy thông tin đối tượng đầu hàng đợi mà không hủy đối tượng khỏi hàng đợi  Input: hàng đợi Output: giá trị đối tượng đầu hàng đợi  Giải thuật:   Kiểm tra hàng đợi rỗng?  Trả giá trị phần tử đầu hàng đợi Cấu trúc liệu giải thuật – HCMUS 2016 70  Ví dụ: Hàng đợi ban đầu 6 r=6 f=2 GetFront() = r=6 f=2 Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 35 71    Bộ đệm bàn phím máy tính Xử lý lệnh máy tính: hàng đợi thơng điệp Windows, hàng đợi tiến trình … Thường dùng hệ mô Cấu trúc liệu giải thuật – HCMUS 2016 72  Cho DSLK đơn, node DSLK lưu thông tin số nguyên trỏ đến node kế Tạo DSLK đơn (không phá huỷ DSLK cho)  Một danh sách chứa số lẻ danh sách cho  Một danh sách chứa số chẵn danh sách cho Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 36 73 đường chạy tự nhiên từ DSLK cho: VÍ DỤ: DSLK ban đầu biểu diễn số:  In In dãy số: Cấu trúc liệu giải thuật – HCMUS 2016 74  Cho danh sách liên kết đơn L, lập giải thuật thực phép sau đây:  Tính số lượng nút danh sách  Tìm tới nút thứ k danh sách, có nút thứ k cho biết địa nút đó, ngược lại trả null  Bổ sung nút vào sau nút k  Loại bỏ nút đứng trước nút k  Đảo ngược danh sách cho Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 37 75  Hàm MoveToFront có tác dụng di chuyển node xâu lên đầu xâu, hình sau: pHead  37 99 12 21 pNode Chọn kiểu khai báo hàm phù hợp viết code void MoveToFront(NODE   pHead, NODE   pTail, NODE   pNode ) Lưu ý: kí hiệu  *, & khoảng trắng Cấu trúc liệu giải thuật – HCMUS 2016 76 Cho hàng đợi ban đầu sau: (hàng đợi có tối đa phần tử) A B C f=1 r=3 Vẽ tình trạng hàng đợi, cho biết giá trị f, r tương ứng với lần thực thao tác sau: a Bổ sung E vào hàng đợi b Loại phần tử khỏi hàng đợi c Bổ sung I, J, K vào hàng đợi d Loại phần tử khỏi hàng đợi e Bổ sung O vào hàng đợi f Loại phần tử khỏi hàng đợi Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 38 77 Cấu trúc liệu giải thuật – HCMUS 2016 CuuDuongThanCong.com ©FIT-HCMUS https://fb.com/tailieudientucntt 39 ... đầu (hoặc /và cuối) danh sách  (Các) phần tử danh sách  Dữ liệu  Các mối liên kết 12 99 37 Cấu trúc liệu giải thuật – HCMUS 2016 16 12 99 37 Head 12 99 37 Head Tail Cấu trúc liệu giải thuật... ngược Cấu trúc liệu giải thuật – HCMUS 2016 32  Một số hình ảnh thơng dụng:  Một chồng sách bàn  Một chồng đĩa  Cơ cấu hộp chứa đạn súng trường Nhận xét từ ví dụ trên? Cấu trúc liệu giải thuật... + ( ( ( ( ( ( ( ( A ( B + D + A + + ( ( ( ( ) ) - - - - - - ( ( ( ( ( ( ( ( * * * * * * * * * * ( ( ( ( ( ( ( ( ( ( A + - C D * Cấu trúc liệu giải thuật – HCMUS 2016 54  Ví dụ 2: đổi biểu thức

Ngày đăng: 11/01/2020, 17:03

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan