35
Bài 6: CÁC CẤU TRÚC DỮ LIỆU ĐẶC BIỆT: NGĂN XẾP, HÀNG ĐỢI, CÂY

Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Embed Size (px)

DESCRIPTION

Tìm hiểu 3 cấu trúc dữ liệu đặc biệt: Ngăn xếp (Stack), Hàng đợi (Queue) và Cây (Tree): Khái niệm Cách cài đặt trong VB.Net Các thao tác cơ bản trên các cấu trúc dữ liệu

Citation preview

Page 1: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Bài 6:CÁC CẤU TRÚC DỮ LIỆU ĐẶC BIỆT:

NGĂN XẾP, HÀNG ĐỢI, CÂY

Page 2: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Nhắc lại bài cũ

Tìm hiểu các giải thuật sắp xếp cơ bản trên cấu

trúc dữ liệu mảng

Tìm hiểu các giải thuật tìm kiếm cơ bản trên

cấu trúc dữ liệu mảng

Đánh giá và so sánh hiệu quả các giải thuật

Slide 6 – Ngăn xếp, Hàng đợi và Cây 2

Page 3: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Tìm hiểu 3 cấu trúc dữ liệu đặc biệt: Ngăn xếp (Stack),

Hàng đợi (Queue) và Cây (Tree):

Khái niệm

Cách cài đặt trong VB.Net

Các thao tác cơ bản trên các cấu trúc dữ liệu

Mục tiêu bài học hôm nay

Slide 6 – Ngăn xếp, Hàng đợi và Cây 3

Page 4: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Khái niệm ngăn xếp

Slide 6 – Ngăn xếp, Hàng đợi và Cây 4

Ngăn xếp (Stack):

Các phần tử được lưu trữ thành một danh

sách liên tiếp nhau.

Việc thêm hay loại lấy một phần tử ra

khỏi danh sách đều được thực hiện ở một

đầu gọi là đỉnh của ngăn xếp.

Ví dụ: Chồng sách đặt trên bàn

Page 5: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Khái niệm ngăn xếp

Slide 6 – Ngăn xếp, Hàng đợi và Cây 5

Stack tuân theo cấu trúc: LIFO (Last In – First Out):

Phần tử được đưa vào trong ngăn xếp sau cùng sẽ được lấy ra

trước tiên.

Phần tử đưa vào trong ngăn xếp trước tiên sẽ được lấy ra sau

cùng.

Page 6: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Các thao tác trên ngăn xếp

Slide 6 – Ngăn xếp, Hàng đợi và Cây 6

Có một số thao tác với ngăn xếp hay được thực hiện

Thêm (push) một phần tử vào đỉnh ngăn xếp

Lấy (pop) một phần tử từ đỉnh của ngăn xếp

Xem (peek) nội dung của phần tử ở đỉnh của ngăn

xếp

Page 7: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Ví dụ

Slide 6 – Ngăn xếp, Hàng đợi và Cây 7

Stack S lưu trữ các kí tự

Push(S,A)

Push(S,B)

Push(S,C)

Pop(S,C)

Push(S,D)Pop

(S,D)Pop(S,B)

Page 8: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Ngăn xếp được cài đặt trong VB.Net bằng lớp Stack

Lớp Stack là cài đặt giao diện Icollection

Lớp Stack cung cấp các phương thức cho phép thực hiện

các thao tác trên ngăn xếp như: Push(), Pop(), Peek(),

Contains(), …

Lớp Stack trong VB.Net

Slide 6 – Ngăn xếp, Hàng đợi và Cây 8

Page 9: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Khởi tạo ngăn xếp

Slide 6 – Ngăn xếp, Hàng đợi và Cây 9

3 cách khởi tạo:

Cách 1: Tạo 1 ngăn xếp rỗng mặc định chứa được 10 giá trị

Ví dụ: Dim myStack As New Stack()

Cách 2: Tạo 1 ngăn xếp từ 1 đối tượng collection khác

Ví dụ: Dim names() As String = {"Raymond",

"David“,"Mike"}Dim nameStack As New Stack(names)

Cách 3: Tạo 1 ngăn xếp và chỉ định luôn dung lượng ngăn xếp

Ví dụ: Dim myStack As New Stack(25)

Page 10: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Các phương thức lớp Stack

Slide 6 – Ngăn xếp, Hàng đợi và Cây 10

Push(): Thêm một phần tử (Item) vào đỉnh ngăn xếp myStack

Cú pháp: myStack.Push(Item)

Pop(): Lấy phần tử từ đỉnh ngăn xếp myStack

Cú pháp: myStack.Pop() -> trả về phần tử ở đỉnh của ngăn xếp

Peek(): Xem nội dung phần tử tại đỉnh ngăn xếp myStack

Cú pháp: myStack.Peek()

Page 11: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Các phương thức lớp Stack

Count(): Trả về số phần tử có trong ngăn xếp myStack

Cú pháp: myStack.Count()

Clear(): Xóa tất cả các phần tử có trong ngăn xếp myStack

Cú pháp: myStack.Clear()

Contains(): Kiểm tra xem một phần tử Item nào đó có tồn tại trong

ngăn xếp myStack không

Cú pháp: myStack.Contains(Item)

Slide 6 – Ngăn xếp, Hàng đợi và Cây 11

Page 12: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Các phương thức lớp Stack

CopyTo(): copy nội dung của ngăn xếp myStack vào một mảng

myArray bắt đầu từ vị trí index

Cú pháp: myStack.CopyTo(myArray, index)

ToArray(): copy nội dung của ngăn xếp myStack vào một mảng

myArray

Cú pháp: myArray = myStack.ToArray()

Slide 6 – Ngăn xếp, Hàng đợi và Cây 12

Page 13: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Ví dụ sử dụng một số phương thức

Slide 6 – Ngăn xếp, Hàng đợi và Cây 13

Imports System.Collections

Module Module1

Sub Main()

Dim Nums As New Stack()

Dim num As Integer

Dim x As Integer

Dim arrayCopy() As Object

Dim myArray() As Object

'Phuong thuc Push()

For x = 5 To 20 Step +5

Nums.Push(x)

Next

' Phuong thuc Peek() va Pop()

If (IsNumeric(Nums.Peek())) Then

num = Nums.Pop()

Console.WriteLine("Phan tu vua duoc lay ra

khoi ngan xep la: " + num)

End If

Page 14: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Ví dụ sử dụng một số phương thức

Slide 6 – Ngăn xếp, Hàng đợi và Cây 14

'Phuong thuc Contains()

If (Nums.Contains(10)) Then

Console.WriteLine("Gia tri 10 ton

tai trong Stack")

End If

'Phuong thuc Count() va Clear()

If (Nums.Count() = 0) Then

Nums.Clear()

End If

'Phuong thuc CopyTo() va ToArray()

Nums.CopyTo(arrayCopy, 0)

myArray = Nums.ToArray()

End Sub

End Module

Page 15: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Ví dụ ứng dụng Stack

Slide 6 – Ngăn xếp, Hàng đợi và Cây 15

Ứng dụng stack để đảo ngược danh sách

Giải thuật:

1. Lặp lại n lần

1.1. Nhập vào một giá trị

1.2. Đẩy nó vào stack

2. Lặp khi stack chưa rỗng

2.1. Lấy một giá trị từ stack

2.2. In ra

Page 16: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Ví dụ ứng dụng Stack

Slide 6 – Ngăn xếp, Hàng đợi và Cây 16

Page 17: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Khái niệm Hàng đợi (Queue)

Slide 6 – Ngăn xếp, Hàng đợi và Cây 17

Hàng đợi (Queue):

Các phần tử được lưu trữ thành một danh sách liên tiếp nhau.

Việc thêm 1 phần tử vào danh sách được thực hiện ở một đầu (cuối hàng)

Việc lấy ra 1 phần tử của danh sách được thực hiện ở đầu khác (đầu hàng)

Ví dụ:Dòng người xếp hàng chờ trong siêu thị

Page 18: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Khái niệm Hàng đợi (Queue)

Slide 6 – Ngăn xếp, Hàng đợi và Cây 18

Hàng đợi tuân theo cấu trúc FIFO (First In – First Out):

Các phần tử vào trong hàng đợi trước sẽ được lấy ra trước.

2 13Thêm vào

1

Lấy ra

Page 19: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Các thao tác trên hàng đợi

Slide 6 – Ngăn xếp, Hàng đợi và Cây 19

Một số thao tác cơ bản trên queue

Bổ sung (enqueue) thêm phần tử vào cuối hàng đợi

Lấy (dequeue phần tử ở đầu hàng đợi

Xem (peek) nội dung phần tử ở đầu hàng đợi

Page 20: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Ví dụ

Slide 6 – Ngăn xếp, Hàng đợi và Cây 20

Ví dụ hàng đợi Q lưu trữ các kí tự

Bổ sung A, B và C vàocuối hàng đợi

Lấy phần tử đầu tiêntrong hàng đợi

Bổ sung D vào cuốihàng đợi

Page 21: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Hàng đợi được cài đặt trong VB.Net bằng lớp Queue

Lớp Queue bao gồm các phương thức như:

Enqueue(): Bổ sung thêm phần tử vào đuôi của hàng đợi

Dequeue(): Lấy một phần tử từ đầu của hàng đợi

Peek(): Xem nội dung của phần tử tại đầu của hàng đợi

Count(): Trả về số phần tử có trong hàng đợi

Clear(): Hủy hàng đợi và tất cả các phần tử có trong hàng đợi

Lớp Hàng đợi trong VB.Net

Slide 6 – Ngăn xếp, Hàng đợi và Cây 21

Page 22: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Có 3 cách:Cách 1: Tạo một hàng đợi rỗng mặc định chứa được 32 phần tử

Ví dụ: Dim myQueue As New Queue()

Cách 2: Tạo một hàng đợi và chỉ định sẵn dung lượng hàng đợi

Ví dụ: Dim myQueue As New Queue(100)

Cách 3: Tạo một ngăn xếp và chỉ định tốc độ gia tăng kích thước

Ví dụ: Dim myQueue As New Queue(32, 3R)

Cách khai báo Hàng đợi

Slide 6 – Ngăn xếp, Hàng đợi và Cây 22

Page 23: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Các phương thức trong Hàng đợi

Slide 6 – Ngăn xếp, Hàng đợi và Cây 23

Enqueue(): Bổ sung phần tử Item vào đuôi của hàng đợi myQueue

Cấu trúc: myQueue.Enqueue(Item)

Dequeue(): Lấy phần tử từ đầu của hàng đợi myQueue

Cấu trúc: myQueue.Dequeue

Peek(): Thăm phần tử tại đầu của hàng đợi myQueue

Cấu trúc: myQueue.Peek

Page 24: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Các phương thức trong Hàng đợi

Slide 6 – Ngăn xếp, Hàng đợi và Cây 24

Count: Trả về số phần tử có trong hàng đợi

Cấu trúc: myQueue.Count

Clear: Hủy hàng đợi và tất cả các phần tử có trong hàng đợi

myQueue

Cấu trúc: myQueue.Clear

Page 25: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Ứng dụng của Hàng đợi

Slide 6 – Ngăn xếp, Hàng đợi và Cây 25

Hàng đợi có thể được sử dụng trong một số bài toán:

Bài toán ‘sản xuất và tiêu thụ’ (ứng dụng trong các hệ điều hành

song song).

Bộ đệm lệnh (ví dụ: Nhấn phím ⇒ Bộ đệm ⇒ CPU xử lý).

Xử lý các lệnh trong máy tính (ứng dụng trong HĐH, trình biên

dịch), hàng đợi các tiến trình chờ được xử lý,

Page 26: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Khái niệm Cây (Tree)

Slide 6 – Ngăn xếp, Hàng đợi và Cây 26

Cây là tập hợp các phần tử (Nút) và các cạnh được tổ

chức như sau:

Mỗi nút của cây mang một thông tin nào đó

Cách cạnh dùng để liên kết các nút với nhau

Page 27: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Khái niệm Cây (Tree)

Slide 6 – Ngăn xếp, Hàng đợi và Cây 27

Page 28: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Khái niệm Cây (Tree)

Slide 6 – Ngăn xếp, Hàng đợi và Cây 28

Các khái niệm liên quan:

Nút cha – Nút con: Mỗi nút trong cây có đúng một nút nằm

trên nó (nút cha), các nút nằm ngay dưới nó gọi là nút con

Nút anh em: các nút nằm cùng cấp

Nút lá: Nút không có nút con nào.

Page 29: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Khái niệm Cây (Tree)

Slide 6 – Ngăn xếp, Hàng đợi và Cây 29

Các khái niệm liên quan:

Bậc của nút: là số cây con của nút đó

Bậc của cây: là bậc lớn nhất của các nút trong cây

Mức của nút: mức của nút gốc cây con chứa nó cộng thêm 1,

trong đó mức của nút gốc = 0.

Chiều cao của cây: là mức cao nhất của các nút trong cây

Chiều dài đường đi của một nút: là tổng số nút tính từ nút gốc

để đi đến nút đó.

Page 30: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Cây nhị phân

Slide 6 – Ngăn xếp, Hàng đợi và Cây 30

Cây nhị phân là cây đặc biệt mà mỗi nút của nó chỉ có nhiều nhất 2

nút con.

Khi đó, 2 cây con của mỗi nút được gọi là cây con trái và cây con

phải

Cây nhị phân Cây nhị phân đầy đủ

Page 31: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Cây nhị phân tìm kiếm

Slide 6 – Ngăn xếp, Hàng đợi và Cây 31

Là cây nhị phân có tính chất:

Khóa của nút con bên trái bao giờ cũng nhỏ hơn khóa của nút cha

Khóa của nút con bên phải bao giờ cũng lớn hơn khóa của nút cha.

Ví dụ

Page 32: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Là thao tác thăm tất cả các nút của cây, mỗi nút đúng

một lần.

3 phương pháp duyệt:

Duyệt theo thứ tự trước

Duyệt theo thứ tự giữa

Duyệt theo thứ tự cuối

Phương pháp đệ qui được ứng dụng để cài đặt các

phương pháp duyệt trên

Duyệt cây nhị phân

Slide 6 – Ngăn xếp, Hàng đợi và Cây 32

Page 33: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Duyệt cây nhị phân

Slide 6 – Ngăn xếp, Hàng đợi và Cây 33

Ví dụ duyệt theo thứ tự giữa:

Duyệt cây gốc 16, Thăm 23, Duyệt cây gốc 45

Thứ tự duyệt: 3, 16, 22, 23, 27, 45, 99

Page 34: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Ứng dụng cây nhị phân

Slide 6 – Ngăn xếp, Hàng đợi và Cây 34

Ứng dụng để giải bài toán tìm kiếm kiểu nhị phân và

duyệt cây theo thứ tự giữa.

Page 35: Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPT

Tổng kết

Slide 6 – Ngăn xếp, Hàng đợi và Cây 35

Ngăn xếp là danh sách các phần tử mà việc thêm vào

hay lấy ra các phần tử chỉ thực hiện ở Đỉnh ngăn xếp.

Hàng đợi là danh sách các phần tử mà việc thêm phần tử

được thực hiện ở cuối hàng, việc lấy ra phần tử thực hiện

ở đầu hàng.

Cây là cấu trúc mà các phần tử đóng vai trò là các Nút

của cây. Có 3 cách khác nhau để duyệt các phần tử của

cây.