Ngăn xếp ADT Stack ADT Ngăn xếp là một danh sách đặc biệt mà thaotác thêm insert và loại bỏ delete chỉ diễn ra ở 1 đầu.. Một số ứng dụng –Chuyển từ trung tố sang hậu tố Một số quy tắc
Trang 1CẤU TRÚC DỮ LIỆU
CẤU TRÚC DỮ LIỆU
VÀ GIẢI THUẬT
Lý thuyết
Trang 3Ngăn xếp ADT (Stack ADT)
Ngăn xếp là một danh sách đặc biệt mà thaotác thêm (insert) và loại bỏ (delete) chỉ diễn
ra ở 1 đầu
Ví trí tại đó phép thêm và xóa diễn ra luôn ở
Ví trí tại đó phép thêm và xóa diễn ra luôn ở
cuối của danh sách và được gọi là top.
Trang 4Ngăn xếp ADT (Stack ADT)
Mô hình ngăn xếp :
Thêm 1 phần tử : push
Trang 5Ngăn xếp ADT (Stack ADT)
Phép thêm và loại bỏ luôn diễn ra tại top
Trang 6 Thao tác pop được thực hiện bằng cách
xóa phần tử ở cuối danh sách
Thao tác top chỉ đơn thuần kiểm tra phần
Trang 8Cài đặt ngăn xếp
Sử dụng mảng:
Dùng thêm biến topOfStack để điều khiển
Dùng thêm biến topOfStack để điều khiển
các thao tác với ngăn xếp
topOfStack = 1 nếu ngăn xếp rỗng
topOfStack = -1 nếu ngăn xếp rỗng.
Yêu cầu: Sinh viên tự viết code cho cả 3 cài
đặt sử dụng list, vector và array
Trang 9Một số ứng dụng –
Cân bằng ký hiệu (Balancing)
Kiểm tra các dấu ngoặc trong quá trình
kiểm tra lỗi cú pháp
Tạo một ngăn xếp rỗng
Đọc các ký tự dấu
Nế ký là ộ ký hiệ ở đặ ó à ă ế
Nếu ký tự là một ký hiệu mở, đặt nó vào trong ngăn xếp
Nếu nó là một ký hiệu đóng, thì nếu ngăn xếp là rỗng thì thông báo một lỗi Ngược lại, lấy ra khỏi ngăn xếp
Trang 13Một số ứng dụng –
Biểu thức hậu tố (Postfix Exp)
Tiếp theo ‘+’ được đọc, do vậy 3 và 2 đượclấy ra từ ngăn xếp và tổng của chúng, 5,
lấy ra từ ngăn xếp và tổng của chúng, 5,
được đNy vào
Trang 14Một số ứng dụng –
Biểu thức hậu tố (Postfix Exp)
Tiếp theo 8 được đNy vào
Bây giờ ‘*’ được nhìn thấy, do vậy 8 và 5
được lấy ra và 5 * 8 = 40 được đNy vào
Trang 15Một số ứng dụng –
Biểu thức hậu tố (Postfix Exp)
Tiếp theo ‘+’ được nhìn thấy, do vậy 40 và
5 được lấy ra và 5 + 40 = 45 được đNy vàoợ y ợ y
N
3 được đNy vào
Trang 16Một số ứng dụng –
Biểu thức hậu tố (Postfix Exp)
‘+’ tiếp theo lấy ra 3 và 45 và đNy vào 45 +
3 = 48
Cuối cùng ‘*’ được nhìn thấy và 48 và 6
được lấy ra; 6 * 48 = 288 được đNy vào
Trang 17Một số ứng dụng –
Chuyển từ trung tố sang hậu tố
Sử dụng một ngăn xếp để chuyển một biểu
thức ở dạng chuNn (được gọi theo cách khácạ g ( ợ gọ
là trung tố - infix) sang dạng hậu tố - postfix
Chúng ta chỉ xét một bài toán nhỏ với các
Chúng ta chỉ xét một bài toán nhỏ với các
phép +, *, (, )
Ví dụ : a + b * c + ( d * e + f ) * g
Ví dụ : a + b * c + ( d * e + f ) * g
Trang 18Một số ứng dụng –
Chuyển từ trung tố sang hậu tố
Một số quy tắc :
Gặp toán hạng : chuyển qua đầu ra
Gặp toán hạng : chuyển qua đầu ra
Gặp toán tử, hoặc dấu mở ngoặc : đưa
vào stack
Toán tử được đưa ra đầu ra sau khi xử lý,
h dấ ặ hì khônhưng dấu ngoặc thì không
Dấu + ưu tiên thấp nhất, ( là ưu tiên cao
Trang 19Một số ứng dụng –
Chuyển từ trung tố sang hậu tố
Đầu tiên, ký hiệu a được đọc, do vậy nó
được truyền tới đầu ra ợ y
Sau đó + được đọc và được đặt lên trên
Trang 20Một số ứng dụng –
Chuyển từ trung tố sang hậu tố
Tiếp theo * được đọc Mục ở đỉnh của ngănxếp toán tử có quyền ưu tiên thấp hơn so p q y p
với *, do vậy không có gì được đưa ra và * được đặt vào ngăn xếp Tiếp theo, c đượcợ ặ g p p , ợ
đọc và đưa ra output
Trang 21Một số ứng dụng –
Chuyển từ trung tố sang hậu tố
Kí hiệu tiếp theo là + Kiểm tra ngăn xếp,
chúng ta thấy rằng chúng ta sẽ lấy ra * vàg y g g y
đặt nó lên đầu ra; lấy ra + còn lại, nó có
quyền ưu tiên không thấp hơn nhưng bằng,
trên ngăn xếp; và sau đó đNy + vào stack
Trang 22Một số ứng dụng –
Chuyển từ trung tố sang hậu tố
Ký hiệu đọc tiếp theo là (, đang có quyền ưutiên cao nhất, đặt nó lên trên ngăn xếp., ặ g p
Trang 23Một số ứng dụng –
Chuyển từ trung tố sang hậu tố
Bây giờ ta đọc ), do vậy ngăn xếp được làm rỗng cho tới ( Chúng ta đưa ra +
Trang 24Một số ứng dụng –
Chuyển từ trung tố sang hậu tố
C ối ù
Cuối cùng
Trang 25Một số ứng dụng –
Lời gọi hàm
Các lời gọi hàm sử dụng ngăn xếp
Có thể xem một ví dụ về gọi hàm đệ quy
Có thể xem một ví dụ về gọi hàm đệ quy
Hàm tính n!
Hàm fibonaci
Hàm fibonaci
Trang 26Hàng đợi ADT (Queue ADT)
Hàng đợi là danh sách mà việc chèn được
thực hiện ở một đầu trong khi việc xóa đượcthực hiện ở đầu còn lại
Thêm phần tử : enqueue nó chèn một phần
Thêm phần tử : enqueue, nó chèn một phần
tử vào cuối của danh sách (được gọi là rear)
Xó hầ tử d ó ó ột hầ tử
Xóa phần tử : dnqueue, nó xóa một phần tử
ở đầu của danh sách (được gọi là front)
Trang 27Mô hình hàng đợi
Mô hình hàng đợi với phép enqueue và
dequeue
Trang 28Sử dụng mảng cài đặt hàng đợi
Sử dụng mảng
Mảng vòng tròn
Trang 29Các ứng dụng của hàng đợi
Điều phối công việc cho máy in
Hàng đợi cuộc gọi
Hàng đợi cuộc gọi
Một số chương trình cần xử lý có hàng đợi
í d h t ì h d đ á SMS
ví dụ : chương trình dự đoán qua SMS