You can keep the Credits slide or mention SlidesCarnival and other resources used in a slide footer.▪ Stack là một cấu trúc dữ liệu hoạt động theo nguyên tắc Last In First OutHiểu đơn gi
Trang 1Cấu trúc
dữ liệu
ngăn xếp - Stack
Trang 21 Khái niệm
Stack
▪ Khi muốn cho cầu vào trong hộp ta sẽ cho cầu vào đáy hộp cầu và khi muốn lấy cầu ra thì ta sẽ lấy quả cầu gần nhất được cho vào.
)
More info on how to use this template at www.slidescarnival.com/help-use-presentation-template
This template is free to use under Creative Commons Attribution license You can keep the Credits slide or mention SlidesCarnival and other
resources used in a slide footer.
▪ Stack là một cấu trúc dữ liệu hoạt động
theo nguyên tắc Last In First Out
Hiểu đơn giản là phần tử sẽ được thêm vào
cuối stack và khi lấy ra ta cũng sẽ lấy phần tử
cuối stack (phần tử được thêm vào gần nhất).
Một ví dụ trong thực tế của stack mà các bạn có
thể dễ hình dung được đó chính là hộp cầu lông
2
Trang 3Một stack sẽ hỗ trợ các thao tác cơ bản sau:
Thêm phần tử vào cuối stack
Loại bỏ phần tử cuối ra khỏi stack
Lấy giá trị cuối trong stack
Lấy kích thước stack
3
Trang 42 Cài đặt
ngăn xếp
bằng mảng
Chúng ta sẽ sử dụng mảng 1 chiều
kiểu int làm Stack stack, một biến
capacity để lưu kích thước(sức chứa)
của stack và một biến top để lưu chỉ
số của phần tử ở top của Stack stack
4
Trang 5Kiểm tra stack đầy(IsFull)
Hàm này sẽ kiểm tra xem stack hiện tại đã đầy
hay chưa Nếu chỉ số top của stack đang
1
Trang 6Kiểm tra stack rỗng(IsEmpty)
• Nếu như stack đang không có phần tử nào, ta sẽ gán
chỉ số top = -1 để đánh dấu
• Như vậy, để kiểm tra stack có đang rỗng hay không
rất đơn giản Ta chỉ cần so sánh giá trị top có phải -1
hay không mà thôi
2.
2
Trang 72.3 Thêm phần tử vào đỉnh stack(Push)
▪ Chúng ta sẽ chỉ có thể push(thêm phần tử) vào đỉnh stack khi stack chưa
đầy
▪ Nếu stack đầy, chúng ta sẽ đưa ra thông báo và không thực hiện push
▪ Ngược lại, ta sẽ tăng top lên một đơn vị và gán giá trị cho phần tử tại chỉ
số top
7
Trang 8▪ Chúng ta sẽ chỉ có thể pop(xóa
phần tử) khỏi đỉnh stack khi
stack không trống Nếu stack
trống, chúng ta sẽ đưa ra thông
báo và không thực hiện pop
2.4 Xóa phần tử khỏi đỉnh stack(Pop)
▪ Ngược lại, ta sẽ giảm giá trị top
đi một đơn vị
8
Trang 102.6 Lấy số lượng phần
tử stack đang có(Size)
Biến top lưu chỉ số lớn nhất của
stack Như vậy, việc lấy size của
stack cực kỳ đơn giản:
10
Trang 11Và cuối cùng, chúng ta sẽ có 1 chương trình cài đặt stack hoàn thiện như sau:
11
Trang 194 Chuyển biểu thức trung tố
sang hậu tố
Bao gồm :
▪ Phương pháp chuyển từ biểu thức trung tố
sang tiền tố và hậu tố
▪ Độ ưu tiên của các toán tử
▪ Định dạng lại biểu thức Infix trước khi
chuyển đổi
▪ Các phương thức kiểm tra toán tử và toán
Trang 20Thế nào là biểu thức tiền tố, trung tố và hậu tố ?
▪ Prefix: Biểu thức tiền tố được biểu diễn bằng cách đặt toán tử lên trước
các toán hạng
▪ Ngược lại với cách Prefix, tức là các toán tử sẽ được đặt sau các
hạng
20
Trang 22Phương pháp chuyển từ biểu thức
trung tố sang tiền tố và hậu tố
Gray
22
Có hai cách để chuyển một biểu thức
từ trung tố sang hai loại còn lại đó là
dùng:
• Stack
• Expression Tree (cây biểu thức)
Trang 23Độ ưu tiên của các
toán tử
▪ Một trong những điều quan trọng trước khi
bắt đầu là phải tính toán được độ ưu tiên
của các toán tử trong biểu thức nhập vào.
▪ Để đơn giản ta chỉ xét các toán tử hai
ngôi và thường dùng bao gồm:
multiply (+),subtract (-), multiply (*),
divide (/), Modulo (%)
▪ Theo đó các toán tử “*, /, %” có cùng
độ ưu tiên và cao hơn hai toán tử “+,
-” Như vậy ta có phương thức lấy độ
Trang 24Định dạng lại biểu thức
Infix trước khi chuyển đổi
▪ Các biểu thức Infix khi nhập vào có thể dư thừa các khoảng trắng, các kí tự không phù hợp
hoặc viết sai cú pháp
▪ Phần kiểm tra cú pháp bạn có thể làm riêng hoặc để luôn trong các thuật toán chuyển đổi.
▪ Trong phần này tôi chỉ trình bày việc định dạng để các phần tử của biểu thức (toán tử, toán
hạng) phải được phân cách với nhau bằng một khoảng trắng Các phần tử này tôi sẽ gọi là một
token.
24
Trang 25Cách viết trên tôi sử dụng kĩ thuật anonymous method,
bạn có thể dùng lambda expression để viết và sử dụng
phương thức Format() của lớp String để mã lệnh ngắn
gọn hơn như sau:
25
Trang 26Các phương thức kiểm tra toán tử và toán hạng:
Trong thuật toán chuyển đổi này ta cần có các phương thức kiểm tra
xem một thành phần của chuỗi có phải là toán tử hoặc toán hạng
không Thay vì sử dụng các cấu trúc if hoặc switch dài dòng và bất
tiện khi phát triển, ta sẽ dùng Regex để kiểm tra