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

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 9

2.5 Lấy giá trị phần tử ở đỉnh stack(Top)

Để lấy giá trị phần tử ở đỉnh stack, ta có thao tác rất đơn giản:

9

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 14

3 Cài đặt

Stack sử dụng danh sách

liên kết

14

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ố

• 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.

26

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