1. Trang chủ
  2. » Công Nghệ Thông Tin

Mô tả kiểu dữ liệu trừu tượng stack pdf

62 2,4K 4
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 đề Mô Tả Kiểu Dữ Liệu Trừu Tượng Stack PDF
Trường học Đại Học Bách Khoa Hà Nội
Chuyên ngành Khoa học Máy Tính
Thể loại Giáo trình hoặc tài liệu hướng dẫn
Năm xuất bản N/A
Thành phố Hà Nội
Định dạng
Số trang 62
Dung lượng 1,17 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Stack, sử dụng mảngThao tác Push: thêm 1 phần tử vào đỉnh Stack int PushStack &s, int newItem {... Stack, sử dụng danh sách liên kết khai báo cấu trúc 1 phần tử trong stack Typedef stru

Trang 1

Mô tả kiểu dữ liệu trừu tượng stack

Trang 4

Mô tả

Có hai lỗi liên quan với kiểu dữ liệu trừu tượng này:

 pop một stack rỗng hoặc

 Chưa định nghĩa vị trí top của một stack rỗng

top

Trang 5

Hiện thực

thời gian O(1) tại cuối dãy

push và pop ở cuối dãy:

top

Trang 6

2 Thông báo lỗi,

3 Bỏ qua phần tử đang push vào Stack,

4 Cho tiến trình ngưng lại chờ đến khi gặp thao

tác pop ra từ Stack

Trang 7

int *arrStack; // mảng chứa các phần tử

int max; // số phần tử tối đa

int top; // vị trí đỉnh Stack

}

Trang 8

Stack, sử dụng mảng

Thao tác khởi tạo Stack rỗng

int Init(Stack &s, int maxItems)

Trang 9

Stack, sử dụng mảng

int IsEmpty(const Stack &s)

Trang 10

Stack, sử dụng mảng

int IsFull(const Stack &s)

{

if (s.top == s.max -1)

đầy

}

Trang 11

Stack, sử dụng mảng

Thao tác Push: thêm 1 phần tử vào đỉnh Stack

int Push(Stack &s, int newItem) {

Trang 12

Stack, sử dụng mảng

Thao tác Pop: lấy ra 1 phần tử từ đỉnh Stack

int Pop(Stack &s, int &outItem) {

Trang 13

Stack, sử dụng danh sách liên kết

khai báo cấu trúc 1 phần tử trong stack

Typedef struct tagSTACK_NODE

{

tagSTACK_NODE *next;

} S_Node;

khai báo cấu trúc stack

Typedef S_Node *SList;

Trang 14

Stack, sử dụng danh sách liên kết

Thao tác khởi tạo Stack rỗng

void InitStack(SList s)

{

s = NULL;

}

Trang 15

Stack, sử dụng danh sách liên kết

Trang 16

Stack, sử dụng danh sách liên kết

Thao tác Push: thêm 1 phần tử vào đỉnh Stack

int Push(SList s, int newItem)

{

SList pNew = new S_Node;

s = pNew;

}

Trang 17

Stack, sử dụng danh sách liên kết

Thao tác Pop: lấy ra 1 phần tử từ đỉnh Stack

int Pop(SList s, int &outItem)

Trang 18

 phân tích cú pháp (parsing code):

 Kiểm tra các dấu ngoặc đơn

 Tổ chức lưu vết các quá trình tìm kiếm theo

chiều sâu và quay lui

 Xử lý các thao tác undo/redo

 Cú pháp nghịch đảo Balan

Trang 19

 Khi các bài toán nhỏ hơn đã được giải quyết,

điều ta quan tâm là trở về bài toán ban đầu

Trang 20

 Đối sánh các tag trong XHTML

 Đối sánh các dấu ngoặc

 đơn ( )

 vuông, và [ ]

trong C++

Trang 21

<head><title> Hello </title></head>

<body><p> This appears in the

<i> browswer </i> </p></body>

</html>

Phân tích cú pháp trong XHTML

Trang 22

Phân tích cú pháp trong

XHTML

Nesting chỉ ra rằng bất kỳ tag đóng nào cũng phải

 Đọc trang tài liệu một cách tuyến tính.

 Đặt tag mở vào stack

 Khi gặp một tag đóng, kiểm tra nó có đối sánh với tag đang ở đỉnh stack ?

Trang 23

Phân tích cú pháp trong XHTML

<html>

<head><title> Hello </title></h ead>

<body><p> This appears in the

<i> browswer </i> </p></body>

</html>

<html>

Trang 24

Phân tích cú pháp trong XHTML

<html>

<head> <title> Hello </title></h ead>

<body><p> This appears in the

<i> browswer </i> </p></body>

</html>

<html> <head>

Trang 25

Phân tích cú pháp trong XHTML

<html>

<head> <title>Hello </title></h ead>

<body><p> This appears in the

<i> browswer </i> </p></body>

</html>

<html> <head> <title>

Trang 26

Phân tích cú pháp trong XHTML

<html>

<head><title> Hello</title> </h ead>

<body><p> This appears in the

<i> browswer </i> </p></body>

</html>

<html> <head> <title>

Trang 27

Phân tích cú pháp trong XHTML

<html>

<head><title> Hello </title> </h ead>

<body><p> This appears in the

<i> browswer </i> </p></body>

</html>

<html> <head>

Trang 28

Phân tích cú pháp trong XHTML

<html>

<head><title> Hello </title></h ead>

<i> browswer </i> </p></body>

</html>

<html> <body>

Trang 29

Phân tích cú pháp trong XHTML

<html>

<head><title> Hello </title></h ead>

<body> <p>This appears in the

<i> browswer </i> </p></body>

</html>

<html> <body> <p>

Trang 30

Phân tích cú pháp trong XHTML

<html>

<head><title> Hello </title></h ead>

<body><p> This appears in the

<i>browswer </i> </p></body>

</html>

<html> <body> <p> <i>

Trang 31

Phân tích cú pháp trong XHTML

<html>

<head><title> Hello </title></h ead>

<body><p> This appears in the

<i> browswer</i> </p></body>

</html>

<html> <body> <p> <i>

Trang 32

Phân tích cú pháp trong XHTML

<html>

<head><title> Hello </title></h ead>

<body><p> This appears in the

<i> browswer </i> </p> </body>

</html>

<html> <body> <p>

Trang 33

Phân tích cú pháp trong XHTML

<html>

<head><title> Hello </title></h ead>

<body><p> This appears in the

<i> browswer </i> </p> </body>

</html>

<html> <body>

Trang 34

Phân tích cú pháp trong XHTML

<html>

<head><title> Hello </title></h ead>

<body><p> This appears in the

<i> browswer </i> </p></body>

</html>

<html>

Trang 35

Phân tích cú pháp trong

XHTML

Ta đã kết thúc việc phân tích cú pháp, và stack đã

rỗng

Những lỗi có thể xảy ra:

 Tag đóng không phù hợp với tag mở trên đỉnh stack

 Còn tag đóng khi stack rỗng

 stack không rỗng khi đã ở cuối tài liệu

Trang 36

Phân tích cú pháp trong C++

Giống như tag mở và tag đóng, các dấu ngoặc trong C++ cũng được lồng nhau một cách tương tự:

int initialize ( int * array, int n )

Trang 38

Lời gọi hàm

đã trình bày trước đây:

 Ta viết một hàm để giải quyết bài toán

 Hàm này cần phải giải những bài toán con nhỏ hơn, vì vậy nó phải gọi hàm khác

 Một khi hàm con đã thực hiện xong, nó trở về nơi đã gọi nó

Trang 39

Cú pháp nghịch đảo Balan

dạng sau:

(3 + 4) × 5 – 6

(3 + 4) × 5 – 6 = 29

3 + 4 × 5 – 6 = 17

3 + 4 × (5 – 6) = –1 (3 + 4) × (5 – 6) = –7

Trang 42

Cú pháp nghịch đảo Balan

 Không có sự tối nghĩa, và cũng không cần các dấu ngoặc

 Tương tự với tiến trình tính toán trên máy tính:

 Các toán hạng được load vào thanh ghi trước khi thực hiện phép toán

Trang 53

Cú pháp nghịch đảo Balan

1 2 3 + 4 5 6 × – 7 × + – 8 9 × +

–2651

Trang 62

Cú pháp nghịch đảo Balan

1 2 3 + 4 5 6 × – 7 × + – 8 9 × +

có kết quả là giá trị tại đỉnh stack: 250

((1 – ((2 + 3) + ((4 – (5 × 6)) × 7))) + (8 × 9))

1 – (2 + 3 + (4 – 5 × 6) × 7) + 8 × 9

Ngày đăng: 09/03/2014, 22:20

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w