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

Cấu trúc dữ liệu và giải thuật Bài thực hành số 3 potx

4 943 1

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 4
Dung lượng 319,64 KB

Nội dung

™ Nếu gặp dấu đóng ngoặc: thì lấy toán tử trong stack ra cho đến khi lấy được dấu mở ngoặc lưu ý: pop dấu mở ngoặc ra, nhưng ko xuất ra chuỗi kết quả Khi đã duyệt kết biểu thức trung tố,

Trang 1

G×F

Bài thực hành số 3

Stack - Queue

Bài tập 3.1:

Viết chương trình tính giá trị biểu thức trung tố theo các yêu cầu sau:

1 Nhập biểu thức trung tố: toán hạng, toán tử và dấu ngoặc

VD: (20+5)/5+(7-3)*100

2 Chuyển biểu thức trung tố thành hậu tố (xuất ra màn hình)

VD: 20 5 + 5 / 7 3 – 100 * +

3 Tính giá trị của biểu thức hậu tố

VD: (20+5)/5+(7-3)*100 = 405

Yêu cầu:

Sinh viên cài đặt stack dùng danh sách liên kết:

1 Khai báo cấu trúc của phần tử trong DSLK dùng làm stack

2 Cài đặt các thao tác: IsEmpty, NewNode, FreeNode, Pop, Push… trên

Stack

Hướng dẫn:

1 Chuyển biểu thức trung tố thành hậu tố:

Duyệt biểu thức trung tố từ trái sang phải

™ Nếu gặp toán hạng thì ghi vào chuỗi kết quả

™ Nếu gặp dấu mở ngoặc thì push ⇒ stack

™ Nếu gặp toán tử gọi là O 1 thực hiện các bước sau:

ƒ Chừng nào còn một toán tử O 2 ở đỉnh stack và

độ ưu tiên của O 1 ≤ độ ưu tiên O 2 thì lấy O 2 ra khỏi stack và ghi vào chuỗi kết quả

ƒ Push O 1 ⇒ stack

Trang 2

™ Nếu gặp dấu đóng ngoặc: thì lấy toán tử trong stack

ra cho đến khi lấy được dấu mở ngoặc (lưu ý: pop dấu mở ngoặc ra, nhưng ko xuất ra chuỗi kết quả) Khi đã duyệt kết biểu thức trung tố, lấy tất cả toán tử trong stack và ghi vào chuỗi kết quả

2 Tính giá trị biểu thức hậu tố:

Đọc biểu thức từ trái sang phải

™ Nếu là toán hạng: Push ⇒ stack

™ Nếu gặp toán tử:

ƒ Lấy 2 toán hạng trong stack ra

ƒ Tính giá trị của 2 toán hạng đó theo toán tử

ƒ Push kết quả ⇒ stack

Khi quá trình kết thúc thì con số cuối cùng còn lại trong stack chính là giá trị của biểu thức đó

Bài tập 3.2:

Bài toán Tháp Hanoi được mô tả như sau: cho 3 cột được đánh số lần lượt

là 1, 2 và 3 Có n đĩa được sắp theo thứ tự đĩa nhỏ ở bên trên đĩa lớn Hãy liệt

kê các bước thực hiện để chuyển tất cả các đĩa từ cột 1 sang cột 2 Quy luật di

chuyển như sau:

1 Mỗi bước chỉ di chuyển 1 đĩa từ cột này sang cột khác

2 Đĩa có bán kính nhỏ luôn sắp trên đĩa có bán kính lớn

1 2 3

Yêu cầu:

Viết chương trình nhập vào số đĩa n, thực hiện các bước di chuyển các đĩa, mỗi

bước di chuyển cho biết cột nguồn (cột lấy đĩa) và cột đích (cột đặt đĩa) Giải thuật

di chuyển không đệ quy, dùng stack để chứa thông tin tạm thời trong quá trình di

chuyển

Trang 3

Sinh viên cài đặt stack dùng danh sách liên kết, mỗi node phần info chứa 3

thông tin {số đĩa di chuyển, cột nguồn, cột đích}

Hướng dẫn:

Như chúng ta biết bài toán tháp Hanoi thường được giải bằng phương pháp đệ

quy Tuy nhiên có thể giải bằng cách dùng stack để khử đệ quy Để thực hiện việc

lưu trữ tạm trong quá trình di chuyển chúng ta dùng một stack Trong đó mỗi phần

tử của stack này chứa các thông tin gồm: số đĩa di chuyển (N), cột nguồn bắt đầu

di chuyển (Nguon) và cột đích là nơi cần di chuyển đến (Dich) Ở đây không cần

lưu cột trung gian vì có 3 cột đánh số là 1, 2 và 3 thì cột trung gian để di chuyển

là: 6 – (Nguon+Dich)

Đầu tiên đưa vào stack thông tin di chuyển {n, 1, 2}, tức là di chuyển n đĩa từ

cột 1 sang cột thứ 2 qua cột trung gian là 6-(1+2) = 3

Tại mỗi bước khi lấy trong stack ra một phần tử chúng ta thực hiện như sau:

ƒ Nếu N = 1: ⇒ di chuyển đĩa từ cột Nguon -> cột Dich

ƒ Ngược lại (nếu N > 1):

• Xác định cột trung gian TrungGian = 6 – (Nguon+Dich)

• Push ⇒ stack thông tin di chuyển {N-1, TrungGian, Dich}

• Push ⇒ stack thông tin di chuyển {1, Nguon, Dich}

• Push ⇒ stack thông tin di chuyển {N-1, Nguon, TrungGian}

Quá trình còn thực hiện khi stack khác rỗng

Nhận xét: Lưu ý thứ tự khi đưa vào thông tin di chuyển vào stack Trong phần

trên thông tin {N-1, Nguon, TrungGian} được đưa vào stack sau cùng nên chúng

sẽ được lấy ra trước tiên, kế đến là thông tin di chuyển {1, Nguon, Dich} và cuối

cùng là thông tin di chuyển {N-1, TrungGian, Dich}

Bài tập 3.3:

Viết chương trình quản lý kho đơn giản thực hiện các chức năng sau:

1 Cho phép thêm một mặt hàng vào kho

2 Xuất một mặt hàng ra khỏi kho

Trang 4

3 Xem tất cả hàng hoá trong kho

4 Xem mặt hàng nào kế tiếp sẽ được xuất kho

Yêu cầu

1 Cài đặt cấu trúc dữ liệu HàngHoá: có các dữ liệu nào liệt kê ra

2 Cài đặt một Queue chứa các hàng hoá trong kho

3 Cài đặt các thao tác trên Queue

4 Cài đặt các chức năng theo mô tả của bài tập

Thời gian làm bài tập 3: từ

Ngoài ra sinh viên có thể bổ sung những chức năng mở rộng tùy ý Tất cả các

chức năng sáng tạo của sinh viên đều được đánh giá cao!

Mọi thắc mắc email về: vanthienhoang@yahoo.com.vn

G×F

Ngày đăng: 29/03/2014, 17:20

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w