btvn.vn
Tìm kiếm Đăng nhập

Cài đặt ngăn xếp bằng danh sách Python

Lưu trên thiết bị này
Chuyên đề lựa chọn CS: Ngăn xếp và hàng đợi · Chọn bài khác

Đỉnh ở cuối danh sách

Dùng list của Python để lưu ngăn xếp theo thứ tự đáy đến đỉnh. `append(x)` thêm ở cuối; `pop()` lấy phần tử cuối. Chỉ số đỉnh khi có phần tử là `len(S)-1`, nên không cần giữ thêm một biến chỉ số riêng. Các hàm dưới đây chủ động báo ValueError khi rỗng. Nếu gọi trực tiếp `[].pop()` của Python, lỗi mặc định là IndexError; đây là hai cách báo lỗi khác nhau. ```python def Stack(): return [] def isEmptyStack(S): return len(S) == 0 def push(S, x): S.append(x) def pop(S): if isEmptyStack(S): raise ValueError("Ngăn xếp rỗng") return S.pop() def top(S): if isEmptyStack(S): raise ValueError("Ngăn xếp rỗng") return S[-1] ```

Theo dõi sau từng thao tác

Chạy tiếp sau các định nghĩa: ```python S = Stack() for x in [3, 7, 2]: push(S, x) a = top(S) b = pop(S) push(S, 9) ``` |Thời điểm|S, từ đáy đến đỉnh|Giá trị vừa nhận| |---|---|---| |Sau vòng for|[3, 7, 2]|—| |Sau top|[3, 7, 2]|a = 2| |Sau pop|[3, 7]|b = 2| |Sau push 9|[3, 7, 9]|—| Muốn đọc dãy theo thứ tự ngược, thêm từng phần tử vào ngăn xếp rồi lấy ra tới khi rỗng. Với 3, 7, 2, kết quả là 2, 7, 3. Không lặp thêm một lần pop sau khi đã rỗng.

Bài luyện

Trong chương trình mẫu, sau top, pop rồi push 9, giá trị a, b và đỉnh mới là gì?
Chọn một đáp án

Bài luyện

Với các hàm vừa định nghĩa, pop(Stack()) xảy ra điều gì?
Chọn một đáp án

Bài luyện

Sau push(S,4), push(S,8), pop(S), push(S,6), với S ban đầu rỗng, S là gì?
Chọn một đáp án

Đang học