python-259Đọc toàn bộ đề miễn phí

Ngăn xếp có sức chứa cố định

Ngăn xếp là cấu trúc vào sau ra trước: phần tử được đẩy vào cuối cùng là phần tử được

PythonCơ bản14 phút

Tiến độ của tôi ở bài này

Điểm và code bạn nộp được lưu vào tài khoản sau khi chấm bài.

Đang tải điểm của bạn…

Kiến thức và chủ đề

data-structuresstacklifoclassentry-ramp

Kiến thức tiên quyết: python-basics, python-lists, python-classes-intro.

Nội dung đề bài

Mô tả bài toán

Ngăn xếp là cấu trúc vào sau ra trước: phần tử được đẩy vào cuối cùng là phần tử được lấy ra đầu tiên. Bọc nó trong một lớp có giới hạn sức chứa giúp bạn làm quen với việc giữ bất biến của cấu trúc, chứ không chỉ là cất dữ liệu vào danh sách.

Yêu cầu

Cài đặt lớp FixedStack với các thành phần:

  • init(self, capacity): lưu sức chứa; ném ValueError nếu capacity nhỏ hơn 1.
  • push(self, value): đẩy value lên đỉnh ngăn xếp; ném OverflowError nếu ngăn xếp

đã đầy. Phương thức trả về None.

  • pop(self): lấy phần tử ở đỉnh ra và trả về nó; ném IndexError nếu ngăn xếp rỗng.
  • peek(self): trả về phần tử ở đỉnh mà không lấy ra; ném IndexError nếu ngăn xếp rỗng.
  • size(self): trả về số phần tử đang có.

Quy ước nộp bài

Nộp lớp FixedStack trong solution.py. Hệ thống khởi tạo lớp rồi gọi phương thức trực tiếp, có kiểm tra các ngoại lệ nêu trên; không dùng stdin và không in ra stdout.

Input

Hệ thống khởi tạo lớp bằng capacity, sau đó gọi lần lượt các phương thức theo kịch bản của từng bộ test. Thứ tự gọi chính là thứ tự bạn thấy trong đề.

Output

Giá trị trả về của từng lời gọi, theo đúng thứ tự đã gọi. push trả về None, pop và peek trả về phần tử ở đỉnh, size trả về một số nguyên.

Ràng buộc

  • capacity từ 0 đến 8; giá trị đẩy vào là số nguyên hoặc chuỗi.
  • Ngăn xếp đầy thì push phải ném OverflowError, tuyệt đối không được âm thầm bỏ phần tử cũ.
  • Ngăn xếp rỗng thì pop và peek phải ném IndexError, không được trả về None.

Ví dụ 1

Input

FixedStack(init={"capacity": 2}, methods=[{"method": "push", "args": [1]}, {"method": "push", "args": [2]}, {"method": "pop"}, {"method": "size"}])

Output

[null, null, 2, 1]

Ví dụ 2

Input

FixedStack(init={"capacity": 1}, methods=[{"method": "pop"}])

Output

raises IndexError

Giải thích

Với capacity = 2, lần lượt gọi push(1), push(2), pop(), size() thì kết quả nhận được là None, None, 2, 1: phần tử 2 vào sau nên ra trước.

3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.

Nhóm Zalo