CHUYÊN đề NGĂN xếp (STACK) môn tin học

54 6 0
CHUYÊN đề NGĂN xếp (STACK) môn tin học

Đ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

1. Lý do chọn đề tài Ngăn xếp và hàng đợi là hai kiểu dữ liệu trừu tượng rất quan trọng và được sử dụng nhiều trong thiết kế thuật toán. Về bản chất, ngăn xếp và hàng đợi là danh sách tức là một tập hợp các phần tử cùng kiểu có tính thứ tự. Ngăn xếp được sử dụng rất nhiều trong việc giải quyết các bài toán về đồ thị trong các đề thi học sinh giỏi. Tuy nhiên trong quá trình giảng dạy tôi thấy học sinh vẫn còn khó khăn trong việc phân tích bài toán để có thể áp dụng được thuật toán và cài đặt giải bài toán. Vì vậy tôi chọn chuyên đề này để giúp học sinh có cái nhìn tổng quan hơn về ngăn xếp và ứng dụng của ngăn xếp trong giải các bài toán cụ thể. 2. Mục đích của đề tài Về nội dung kiến thức ngăn xếp đã có rất nhiều tài liệu đề cập đến, trong chuyên đề này tôi chỉ tổng hợp lại các nội dung kiến thức đã có và chủ yếu là đưa vào áp dụng để giải một số bài toán cụ thế, để làm tài liệu tham khảo cho học sinh và giáo viên trong quá trình học tập và giảng dạy các đội tuyển học sinh giỏi

TRƯỜNG THPT CHUYÊN TỈNH LÀO CAI TỔ TOÁN - TIN -*@* - CHUYÊN ĐỀ NGĂN XẾP (STACK) môn Tin HỌC NĂM HỌC: 2014 - 2015 A, MỞ ĐẦU Lý chọn đề tài Ngăn xếp hàng đợi hai kiểu liệu trừu tượng quan trọng sử dụng nhiều thiết kế thuật toán Về chất, ngăn xếp hàng đợi danh sách tức tập hợp phần tử kiểu có tính thứ tự Ngăn xếp sử dụng nhiều việc giải toán đồ thị đề thi học sinh giỏi Tuy nhiên trình giảng dạy tơi thấy học sinh cịn khó khăn việc phân tích tốn để áp dụng thuật toán cài đặt giải tốn Vì tơi chọn chun đề để giúp học sinh có nhìn tổng quan ngăn xếp ứng dụng ngăn xếp giải tốn cụ thể Mục đích đề tài Về nội dung kiến thức ngăn xếp có nhiều tài liệu đề cập đến, chuyên đề tổng hợp lại nội dung kiến thức có chủ yếu đưa vào áp dụng để giải số toán cụ thế, để làm tài liệu tham khảo cho học sinh giáo viên trình học tập giảng dạy đội tuyển học sinh giỏi B NỘI DUNG 1, Khái niệm: Stack kiểu danh sách tuyến tính đặc biệt mà phép bổ sung loại bỏ thực đầu gọi ← Top đỉnh (Top) Có thể hình dung cấu hộp chứa đạn súng trường súng tiểu liên Khi lắp đạn hay ← Bottom lấy đạn đầu hộp Viên đạn vừa lắp vào đỉnh hộp viên đạn lắp vào đáy hộp (Bottom) Viên đạn nạp vào sau lại viên đạn bắn Với nguyên tắc hoạt động stack “vào sau trước” nên gọi với tên danh sách kiểu LIFO (Last - In - First - Out) 2, Cài đặt stack Ta cài đặt ngăn xếp mảng chứa phần tử ngăn xếp biến top để lưu trữ vị trí phần tử đỉnh ngăn xếp Const MaxSize = 100; { độ dài cực đại stack } Type ElementType = integer; { kiểu phần tử stack } StackType = array[1 MaxSize] of ElementType; Var top : integer; stack : StackType; 3, Các phép xử lý stack a Khởi tạo stack rỗng: top := 0; b Kiểm tra stack có rỗng hay không: if top = then < stack rỗng > else < stack không rỗng >; c Thủ tục lấy phần tử đỉnh stack Function Pop : ElementType; { Trả lại phần tử đỉnh stack } Begin if top = then writeln('STACK can!') else begin Pop := stack[top]; top := top - 1; end; End; d Thủ tục đẩy phần tử vào stack: Procedure Push(x : ElementType); { Đẩy phần tử x vào ngăn xếp } Begin if top = MaxSize then writeln('STACK tran!') else begin top := top + 1; stack[top] := x; end; End; 4, Ứng dụng ngăn xếp: ký pháp nghịch đảo Ba Lan (RPN- Reverse Polish Notation) Nhiệm vụ dịch (compiler) tạo thị máy cần thiết để thực lệnh chương trình gốc viết ngơn ngữ lập trình cấp cao Một phần nhiệm vụ tạo thị máy để đánh giá biểu thức số học Chẳng hạn lệnh gán x := a∗ b + c; dịch phải tạo thị máy tương tự sau: Loa a ; nạp giá trị ô nhớ a vào ghi dự trữ Mul b ; nhân giá trị ô nhớ b với giá trị ghi dự trữ Add c ; cộng thêm giá trị ghi dự trữ với giá trị ô nhớ c Sto x ; lưu trữ giá trị ghi dự trữ vào ô nhớ x Trong đa số ngơn ngữ lập trình, biểu thức số học viết dạng thơng thường tốn học, nghĩa theo kí pháp trung tố (Infix notation): tốn tử ngơi đặt tốn hạng thêm dấu ngoặc Nhiều dịch trước hết chuyển biểu thức trung tố sang kí pháp hậu tố (Postfix notation) hay tiền tố (Prefix notation) dạng hậu tố toán tử sau toán hạng dạng tiền tố tốn tử trước tốn hạng Ví dụ: Infix 2∗(3+4) Postfix + ∗ Prefix ∗2+34 Những năm đầu 1950, nhà lơgíc học Ba Lan: Jan Lukasiewicz phát dấu ngoặc khơng cần thiết kí pháp hậu tố tiền tố Sau ta xét kí pháp hậu tố, cịn gọi kí pháp nghịch đảo Ba Lan RPN - Reverse Polish Notation (ta suy hồn tồn tương tự với kí pháp tiền tố) 5, Chuyển biểu thức từ dạng trung tố sang dạng hậu tố Để minh hoạ ta xét biểu thức trung tố sau đây: + * Khi đọc biểu thức từ trái sang phải, giá trị hiển thị Tiếp theo tốn tử +, lưu trữ tốn hạng bên phải chưa hiển thị, đẩy vào ngăn xếp toán tử: Đầu Ngăn xếp + Tiếp theo toán hạng đọc hiển thị Lúc phải xác định toán hạng bên phải toán tử + toán hạng bên trái toán tử Để xác định điều ta so sánh toán tử + đỉnh ngăn xếp với toán tử * Bởi * ưu tiên +, tốn hạng toán hạng bên trái toán tử * Vì ta đẩy * vào ngăn xếp tìm tốn hạng bên phải nó: Đầu Ngăn xếp 72 * + Toán hạng đọc hiển thị Bởi lúc ta đạt đến kết thúc biểu thức, toán hạng bên phải toán tử * đỉnh ngăn xếp tìm ra, tốn tử * lấy từ ngăn xếp hiển thị: Đầu Ngăn xếp 723* + Dấu kết thúc biểu thức toán hạng bên phải tốn tử cịn lại + ngăn xếp tìm ra, lấy hiển thị, ta biểu thức RPN: * + Các dấu ngoặc biểu thức trung tố không gây khó khăn thực Dấu ngoặc bên trái bắt đầu biểu thức đọc đẩy vào ngăn xếp Đến gặp dấu ngoặc phải, toán tử lấy từ ngăn xếp dấu ngoặc trái tương ứng xuất đỉnh Lúc này, biểu thức ban đầu dấu ngoặc chuyển sang dạng RPN, bỏ qua chúng, phép chuyển đổi tiếp tục Thuật toán chuyển từ dạng trung tố sang dạng RPN: Khởi động ngăn xếp rỗng tốn tử While a Đọc phần tử x (hằng số, biến số, toán tử số học, dấu ngoặc trái ngoặc phải) biểu thức trung tố b Nếu phần tử x là: - Dấu ngoặc trái: đẩy vào ngăn xếp - Dấu ngoặc phải: lấy hiển thị phần tử ngăn xếp dấu ngoặc trái đọc Nếu ngăn xếp rỗng xảy lỗi - Tốn tử: ngăn xếp rỗng hay x ưu tiên phần tử đỉnh ngăn xếp, đẩy x vào ngăn xếp Nếu khác, lấy hiển thị phần tử đỉnh ngăn xếp; Lặp lại việc so sánh x với phần tử đỉnh ngăn xếp (Dấu ngoặc trái xem ưu tiên thấp toán tử) - Tốn hạng: hiển thị Khi đạt đến kết thúc biểu thức trung tố, lấy hiển thị phần tử ngăn xếp ngăn xếp rỗng Cài đặt: chương trình giả sử tốn hạng, tốn tử gồm kí tự giả sử biểu thức trung tố hợp lệ kiểm tra tính đắn biểu thức trung tố Program Infix_to_rpn; Uses crt; Const MaxSize = 100; EndMask = ';'; { dau ket thuc bieu thuc trung to } Var infix, rpn : string; top : integer; stack : array[1 MaxSize] of char; Function Pop : char; Begin Pop := stack[top]; top := top - 1; End; Procedure Push(x : char); Begin top := top + 1; stack[top] := x; End; Function Priority(operator : char) : integer; { ham tra lai uu tien cua cac toan tu } Begin case operator of '(' : Priority:=0; '+', '-' : Priority := 1; '*', '/' : Priority := 2; end; End; Procedure Convert_to_rpn; Var i : integer; x, symbol : char; error, donePop : boolean; Begin write('Bieu thuc dang RPN la: '); rpn := ''; top := 0; error := false; i := 1; x := infix[1]; while (x EndMask) and not error −−∗ ∗ − − −−∗ −−∗ −−∗ −∗ −∗ ∗ ∗ − ∗ − • • • ≤ ≤ • • • ... đẩy vào ngăn xếp - Dấu ngoặc phải: lấy hiển thị phần tử ngăn xếp dấu ngoặc trái đọc Nếu ngăn xếp rỗng xảy lỗi - Tốn tử: ngăn xếp rỗng hay x ưu tiên phần tử đỉnh ngăn xếp, đẩy x vào ngăn xếp Nếu... giúp học sinh có nhìn tổng quan ngăn xếp ứng dụng ngăn xếp giải toán cụ thể Mục đích đề tài Về nội dung kiến thức ngăn xếp có nhiều tài liệu đề cập đến, chuyên đề tổng hợp lại nội dung kiến thức... vào ngăn xếp tìm tốn hạng bên phải nó: Đầu Ngăn xếp 72 * + Toán hạng đọc hiển thị Bởi lúc ta đạt đến kết thúc biểu thức, toán hạng bên phải toán tử * đỉnh ngăn xếp tìm ra, tốn tử * lấy từ ngăn xếp

Ngày đăng: 09/03/2021, 14:07

Mục lục

  • Bài 5: CHIA NHÓM

  • Bài 8: Tuyến đường mới

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan