1. Trang chủ
  2. » Luận Văn - Báo Cáo

cấu trúc dữ liệu ngăn xếp stack

26 0 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Thông tin cơ bản

Tiêu đề Cấu trúc dữ liệu ngăn xếp Stack
Chuyên ngành Cấu trúc dữ liệu và giải thuật
Thể loại Tài liệu học tập
Định dạng
Số trang 26
Dung lượng 2,22 MB

Nội dung

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 1

Cấu trúc

dữ liệu

ngăn xếp - Stack

Trang 2

1 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 3

Mộ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 4

2 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 5

Kiể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 6

Kiể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 7

2.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 10

2.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 11

Và 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 19

4 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 20

Thế 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 22

Phươ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 25

Cá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 26

Cá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

Ngày đăng: 29/05/2024, 06:14

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w