Các thao tác trên ngăn xếpSlide 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
Trang 1Bài 6:
CÁC CẤU TRÚC DỮ LIỆU ĐẶC BIỆT:
NGĂN XẾP, HÀNG ĐỢI, CÂY
Trang 2Đá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
Trang 3Tì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
Trang 4Khá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
Trang 5Khái niệm ngăn xếp
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 ratrước tiên
Phần tử đưa vào trong ngăn xếp trước tiên sẽ được lấy ra saucùng
Trang 6Cá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
Trang 7Ví dụ
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)
Trang 8Ngă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
Trang 9Khởi tạo ngăn xếp
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)
Trang 10Cá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()
Trang 12Cá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
Trang 13Ví dụ sử dụng một số phương thứcImports 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
Trang 14Ví 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()
Trang 152 Lặp khi stack chưa rỗng
2.1 Lấy một giá trị từ stack2.2 In ra
Trang 16Ví dụ ứng dụng Stack
Slide 6 – Ngăn xếp, Hàng đợi và Cây 16
Trang 17Khái niệm Hàng đợi (Queue)
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ị
Trang 18Khá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
Trang 19Các thao tác trên hàng đợi
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
Trang 20Ví 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ào cuối hàng đợi
Lấy phần tử đầu tiên trong hàng đợi
Bổ sung D vào cuối
hàng đợi
Trang 21Hà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
Trang 22Có 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
Trang 23Các phương thức trong Hàng đợi
Enqueue(): Bổ sung phần tử Item vào đuôi của hàng đợi myQueueCấ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
Trang 24Cá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
Trang 25Ứng dụng của Hàng đợi
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ànhsong 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êndịch), hàng đợi các tiến trình chờ được xử lý,
Trang 26Khá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
Trang 27Khái niệm Cây (Tree)
Trang 28Khá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ằmtrê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
Trang 29Khái niệm Cây (Tree)
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 đó
Trang 30Câ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 2nú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
Trang 31Cây nhị phân tìm kiếm
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 chaKhó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ụ
Trang 32Là 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
Trang 33Duyệt cây nhị phân
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
Trang 34Ứ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.
Trang 35Tổng kết
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
được thực hiện ở cuối hàng, việc lấy ra phần tử thực hiện
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.