1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Lecture 09 stacks tài liệu Kỹ thuật Lập trình

37 708 0

Đ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

Định dạng
Số trang 37
Dung lượng 322,51 KB

Nội dung

Lecture – Ngăn xếp (Stacks) 9.1 Khái niệm stacks 9.2 Các thao tác stacks 9.3 Các thao tác khác stacks 9.4 Ví dụ ứng dụng stack 9.4.1 Đảo mảng 9.4.2 Đảo chuỗi 9.4.3 Chuyển đổi hệ số 9.4.4 Bracket Matching 9.4.5 Balancing Act 9.5 Bài tập thực hành 8/28/14 Lecture – Ngăn xếp (Stacks) 9.1 Khái niệm stacks 9.2 Các thao tác stacks 9.3 Các thao tác khác stacks 9.4 Ví dụ ứng dụng stack 9.4.1 Đảo mảng 9.4.2 Đảo chuỗi 9.4.3 Chuyển đổi hệ số 9.4.4 Bracket Matching 9.4.5 Balancing Act 9.5 Bài tập thực hành 8/28/14 9.1 Khái niệm stacks  Có thể hình dung stack chồng đĩa Với chồng đĩa này, nhìn thấy đĩa cùng, đĩa cịn lại chưa nhìn thấy  Khi thêm đĩa vào chồng đĩa (pushed), đĩa đỉnh stack, nhìn thấy  Khi lấy di đĩa từ stack (popped), sử dụng đĩa này, đĩa trở thành đỉnh stack 8/28/14 9.1 Khái niệm stacks  Nguyên lý stack Last In First Out (LIFO), có nghĩa vào sau trước  Với nguyên lý đó, có đĩa stack nhìn thấy Muốn nhìn thấy đĩa thứ 3, cần lấy khỏi stack đĩa thứ thứ 8/28/14 9.1 Khái niệm stacks  Các thao tác stack:  Push: Đưa phần tử vào đỉnh stack  Pop: Lấy từ đỉnh stack phần tử  Peek: Xem đỉnh stack chứa nội dung gì? 8/28/14 9.1 Khái niệm stacks   Một số ứng dụng stack: Ứng dụng trực tiếp:  Ứng dụng bật stack stack cho chương trình, chương trình sử dụng stack để gọi hàm  Trong trình duyệt WEB, trang xem lưu stack  Trong trình soạn thảo văn bản, thao tác Undo lưu stack  Ứng dụng gián tiếp:  Cấu trúc liệu bổ trợ cho thuật toán khác  Một thành phần cấu trúc liệu khác 8/28/14 9.1 Khái niệm stacks  Định nghĩa stack:  MAXSIZE: Số phần tử tối đa stack (nếu dùng mảng)  ItemType: Kiểu liệu cho stack  Thao tác chính:  Push  Pop  Peek  Thao tác khác:  IsEmpty  IsFull  MakeEmpty 8/28/14 9.1 Khái niệm stacks  Thực thi giới hạn stack  Thực thi:  Gọi n số ô nhớ cho stack;  Khơng gian sử dụng stack O(n);  Với thao tác, độ phức tạp O(1)  Giới hạn:  Kích thước tối đa stack định nghĩa trước, thay đổi (nếu dùng mảng);  Nếu stack đầy, không PUSH phần tử vào stack Nếu stack rỗng, thao tác POP cho kết rỗng 8/28/14 Lecture – Ngăn xếp (Stacks) 9.1 Khái niệm stacks 9.2 Các thao tác stacks 9.3 Các thao tác khác stacks 9.4 Ví dụ ứng dụng stack 9.4.1 Đảo mảng 9.4.2 Đảo chuỗi 9.4.3 Chuyển đổi hệ số 9.4.4 Bracket Matching 9.4.5 Balancing Act 9.5 Bài tập thực hành 8/28/14 9.2 Các thao tác stacks  Trước hết, định nghĩa kích thước cho stack: #define MAXSIZE 100  Có thể sử dụng stack để lưu kiểu liệu nào, cần định nghĩa kiểu liệu cho stack: int stack[MAXSIZE];  Có thể dùng trỏ để xác định đỉnh stack đơn giản hơn, dùng phần tử mảng stack để lưu số phần có stack: stack[0] = 0; 10 8/28/14 9.4.1 Đảo mảng  Ý tưởng giải vấn đề: Khởi tạo Stack rỗng, có kiểu số Với n phần tử mảng, đưa vào Stack thông qua hàm Push: Push a[i] into Stack Lần lượt lấy từ Stack n phần tử đưa vào trở lại mảng ban đầu: Pop a item from Stack in to a[i] Kết thúc giải thuật 23 8/28/14 Lecture – Ngăn xếp (Stacks) 9.1 Khái niệm stacks 9.2 Các thao tác stacks 9.3 Các thao tác khác stacks 9.4 Ví dụ ứng dụng stack 9.4.1 Đảo mảng 9.4.2 Đảo chuỗi 9.4.3 Chuyển đổi hệ số 9.4.4 Bracket Matching 9.4.5 Balancing Act 9.5 Bài tập thực hành 24 8/28/14 9.4.2 Đảo chuỗi  Ý tưởng xây dựng chương trình: Tạo wStack rỗng Với từ mWord đọc từ string, đưa từ vào Stack: Push mWord into wStack Đọc từ wStack hết, thực hiện: Pop a word from wStack into mWord Concate mWord to the end of outp string Dừng giải thuật .Chú ý: cần xây dựng hàm tách word từ string 25 8/28/14 Lecture – Ngăn xếp (Stacks) 9.1 Khái niệm stacks 9.2 Các thao tác stacks 9.3 Các thao tác khác stacks 9.4 Ví dụ ứng dụng stack 9.4.1 Đảo mảng 9.4.2 Đảo chuỗi 9.4.3 Chuyển đổi hệ số 9.4.4 Bracket Matching 9.4.5 Balancing Act 9.5 Bài tập thực hành 26 8/28/14 9.4.3 Chuyển đổi hệ số  Các hệ số hay sử dụng:  hệ thập phân (Decimal);  hệ nhị phân (Binary);  hệ 16 (Hexadecimal)     Con người thường sử dụng hệ thập phân Đối với máy tính, thường sử dụng hệ nhị phân Hệ 16 hệ trung gian hệ thập phân hệ nhị phân VD: 111 = (01101111)B = (6F)H 27 8/28/14 9.4.3 Chuyển đổi hệ số  Việc chuyển đổi hệ số thường xét:  Chuyển đổi từ hệ thập phân sang hệ nhị phân  Chuyển đổi từ hệ nhị phân sang hệ thập phân  Chuyển đổi từ hệ thập phân sang hệ 16  Chuyển đổi từ hệ 16 sang hệ thập phân 28 8/28/14 9.4.3 Chuyển đổi hệ số  Ý tưởng:  VD: chuyển đổi từ hệ thập phân sang hệ nhị phân sử dụng Stack: Khởi tạo Stack rỗng Chuyển đổi số từ dạng thập phân sang nhị phân phép div mod cho Kết phép mod đưa vào Stack Đọc từ Stack hết, kết nối với để tạo thành chuỗi Kết thúc giải thuật 29 8/28/14 Lecture – Ngăn xếp (Stacks) 9.1 Khái niệm stacks 9.2 Các thao tác stacks 9.3 Các thao tác khác stacks 9.4 Ví dụ ứng dụng stack 9.4.1 Đảo mảng 9.4.2 Đảo chuỗi 9.4.3 Chuyển đổi hệ số 9.4.4 Bracket Matching 9.4.5 Balancing Act 9.5 Bài tập thực hành 30 8/28/14 9.4.4 Bracket Matching  Một biểu thức sử dụng dấu ngoặc (Bracket) nếu:  với dấu ngoặc trái có dấu ngoặc phải gần khớp với nó;  với dấu ngoặc phải có dấu ngoặc trái gần (bên trái) khớp với nó;  đoạn biểu thức nằm cặp dấu ngoặc trái, phải gọi sử dụng dấu ngoặc; 31 8/28/14 9.4.4 Bracket Matching  Ví dụ sử dụng dấu ngoặc biểu thức toán học: s * (s – a) * (s – b) * (s – c) → Well (– b + (b2 – 4*a*c)^0.5) / 2*a → Well s * (s – a) * (s – b * (s – c) → ??? s * (s – a) * s – b) * (s – c) → ??? (– b + (b^2 – 4*a*c)^(0.5/ 2*a)) → ??? 32 8/28/14 9.4.4 Bracket Matching  Giải thuật kiểm tra sử dụng dấu ngoặc: Tạo bStack rỗng (Stack chứa dấu ngoặc) Với ký hiệu sym đoạn (từ trái sang phải) : 2.1 Nếu sym dấu ngoặc trái: 2.1.1 Đưa sym vào bStack 2.2 Nếu sym dấu ngoặc phải: 2.2.1 Nếu bStack rỗng, return false 2.2.2 Lấy dấu ngoặc bStack, đưa vào biến lef 2.2.3 Nếu lef sym không khớp với nhau, return false Dừng giải thuật, trả True bStack rỗng, False với trường hợp khác 33 8/28/14 Lecture – Ngăn xếp (Stacks) 9.1 Khái niệm stacks 9.2 Các thao tác stacks 9.3 Các thao tác khác stacks 9.4 Ví dụ ứng dụng stack 9.4.1 Đảo mảng 9.4.2 Đảo chuỗi 9.4.3 Chuyển đổi hệ số 9.4.4 Bracket Matching 9.4.5 Balancing Act 9.5 Bài tập thực hành 34 8/28/14 9.4.5 Balancing Act  Với phương pháp trước đảm bảo khớp dấu ngoặc ‘(‘ ‘)’  Trong thực tế, cịn có nhiều dấu ngoặc khác cần khớp như: ‘(‘ ‘)’; ‘[‘ ‘]’; ‘{‘ ‘}’  Như vậy, giải thuật trên, cần lưu ý thêm trình push pop vào bStack:  Nếu trình push vào bStack có dạng: (, [, {  Quá trình pop từ bStack cần thứ tự: }, ], )  Nếu duyệt xong biểu thức bStack rỗng → return True, ngược lại, return False 35 8/28/14 Lecture – Ngăn xếp (Stacks) 9.1 Khái niệm stacks 9.2 Các thao tác stacks 9.3 Các thao tác khác stacks 9.4 Ví dụ ứng dụng stack 9.4.1 Đảo mảng 9.4.2 Đảo chuỗi 9.4.3 Chuyển đổi hệ số 9.4.4 Bracket Matching 9.4.5 Balancing Act 9.5 Bài tập thực hành 36 8/28/14 9.5 Bài tập thực hành Viết chương trình đổi số nguyên khơng âm sang số nhị phân Viết chương trình đảo ngược xâu ký tự Viết chương trình đảo ngược danh sách Cho stack S Hãy viết chương trình thực cơng việc sau:     Đếm số phần tử stack S; Xuất nội dung phần tử thứ n stack S; Xuất nội dung toàn stack S; Loại phần tử thứ n stack S Viết thao tác Stack, sử dụng danh sách liên kết đơn 37 8/28/14 .. .Lecture – Ngăn xếp (Stacks) 9.1 Khái niệm stacks 9.2 Các thao tác stacks 9.3 Các thao tác khác stacks 9.4 Ví dụ ứng dụng stack 9.4.1 Đảo mảng 9.4.2... Nếu stack rỗng, thao tác POP cho kết rỗng 8/28/14 Lecture – Ngăn xếp (Stacks) 9.1 Khái niệm stacks 9.2 Các thao tác stacks 9.3 Các thao tác khác stacks 9.4 Ví dụ ứng dụng stack 9.4.1 Đảo mảng 9.4.2... printf("STACK rong\n"); return -32768; } } 16 8/28/14 Lecture – Ngăn xếp (Stacks) 9.1 Khái niệm stacks 9.2 Các thao tác stacks 9.3 Các thao tác khác stacks 9.4 Ví dụ ứng dụng stack 9.4.1 Đảo mảng 9.4.2

Ngày đăng: 28/08/2014, 21:58

TỪ KHÓA LIÊN QUAN