Câu hỏi:

12/07/2024 153

Em hãy: 

a) Đọc hàm pop(S) ở Hình 8 và cho biết dấu ? cần được thay bằng gì. 

b) Đọc chương trình ở Hình 9 và cho biết kết quả thu được khi chạy chương trình.

c) Bổ sung hai câu lệnh temp=pop(stack) giống nhau vào cuối đoạn chương trình ở Hình 9 và cho biết kết quả thu được khi chạy chương trình. 

d) Viết hàm isEmptyStack(S) với tham số truyền vào là ngăn xếp S. Hàm trả về giá trị True nếu ngăn xếp S đang rỗng không chứa phần tử nào, ngược lại hàm trả về giá trị False. 

e) Sửa lại chương trình thu được khi thực hiện xong câu c) như sau: Thay mỗi câu lệnh temp = pop(stack) thành đoạn chương trình ở Hình 10. Cho biết kết quả thu được khi chạy chương trình.

Em hãy:  a) Đọc hàm pop(S) ở Hình 8 và cho biết dấu ? cần được thay bằng gì.   (ảnh 1)

Em hãy:  a) Đọc hàm pop(S) ở Hình 8 và cho biết dấu ? cần được thay bằng gì.   (ảnh 2)

Quảng cáo

Trả lời:

verified
Giải bởi Vietjack

a) Trong Hình 8, dấu ? trong hàm pop(S) cần được thay bằng lệnh để loại bỏ và trả về phần tử cuối cùng của danh sách S (giả sử S đại diện cho một ngăn xếp). Ví dụ: 

def pop(S): return S.pop() 

b) Chương trình trong Hình 9 khi chạy sẽ tạo ra một ngăn xếp, đẩy số 2 và 4 vào ngăn xếp, sau đó lấy ra một phần tử và cuối cùng in ra "Phần tử đầu của stack là 4". 

c) Nếu bổ xung hai câu lệnh temp=pop(stack) vào cuối chương trình trong Hình 9, chương trình sẽ cố gắng lấy ra hai phần tử nữa từ ngăn xếp. Sau khi lấy ra '4', chỉ còn '2' trong ngăn xếp. Lệnh pop đầu tiên sẽ loại bỏ '2', nhưng sau đó không còn phần tử nào cho lệnh pop thứ hai, có thể dẫn đến lỗi trừ khi có thêm mã xử lý. 

d) Hàm isEmptyStack(S) với tham số truyền vào là ngăn xếp S. Hàm trả về giá trị True nếu ngăn xếp S đang rỗng không chứa phần tử nào, ngược lại hàm trả về giá trị False. Hàm isEmptyStack(S) có thể được viết như sau: 

def isEmptyStack(S): return len(S) == 0 

e) Nếu thay thế mỗi câu lệnh temp = pop(stack) bằng đoạn mã trong Hình 10 sẽ thêm kiểm tra rỗng trước khi thực hiện lấy phần tử từ ngăn xếp. Kết quả khi chạy chương trình sẽ phụ thuộc vào việc ngăn xếp có phần tử hay không. Nếu rỗng, nó sẽ in ra thông báo ngăn xếp rỗng. Nếu không rỗng, nó sẽ in phần tử được lấy ra.

CÂU HỎI HOT CÙNG CHỦ ĐỀ

Lời giải

Chương trình yêu cầu người sử dụng nhập năm số nguyên dương - bất kì từ bàn phím, sau đó in ra màn hình năm số này theo thứ tự đảo ngược của thứ tự nhập vào. Trong chương trình có sử dụng kiểu dữ liệu ngăn xếp và các thao tác đã học trên ngăn xếp.

Muốn viết chương trình này ta sẽ sử dụng cấu trúc dữ liệu ngăn xếp (stack) để lưu trữ các số nguyên dương người dùng nhập vào. Ngăn xếp là một cấu trúc dữ liệu hoạt động theo nguyên lý LIFO (Last In, First Out), tức là phần tử được thêm vào cuối cùng sẽ là phần tử được lấy ra đầu tiên.

Sử dụng ngôn ngữ lập trình Python để thực hiện như sau:

class Stack:

   def __init__(self):

        self.items = []

   def push(self, item):

        self.items.append(item)

   def pop(self):

        if not self.is_empty():

            return self.items.pop()

        else:

            return None

   def is_empty(self):

        return len(self.items) == 0

   def size(self):

        return len(self.items)

def main():

   stack = Stack()

   print("Nhập vào năm số nguyên dương:")

   # Yêu cầu người dùng nhập vào 5 số nguyên dương

   for i in range(5):

        while True:

            try:

                num = int(input(f"Nhập số thứ {i+1}: "))

                if num > 0:

                    stack.push(num)

                    break

                else:

                    print("Vui lòng nhập một số nguyên dương.")

            except ValueError:

                print("Đó không phải là một số nguyên. Vui lòng thử lại.")

   # Lấy các số ra khỏi ngăn xếp và in theo thứ tự đảo ngược

   print("Các số theo thứ tự đảo ngược:")

   while not stack.is_empty():

        print(stack.pop(), end=" ")

if __name__ == "__main__":

   main()

Lời giải

Để cài đặt ngăn xếp với hai thao tác thêm vào (push) và lấy ra (pop), ta có thể dùng mảng một chiều. Khi đó, các phần tử trong mảng sẽ là các phần tử đang có trong ngăn xếp. Ngăn xếp S ở Hình 4a có thể được biểu diễn bởi một mảng một chiều mô phỏng như ở Hình 4b. Các phần tử trong mảng theo thứ tự từ đầu đến cuối sẽ tương ứng với các phần tử trong ngăn xếp theo thứ tự từ đáy lên đỉnh.

1. Thêm vào 13: Ngăn xếp SSS và mảng:

Ngăn xếp: [13,11,9,5,1] [13, 11, 9, 5, 1] [13,11,9,5,1]

Mảng:

Chỉ số

0

1

2

3

4

Giá trị

1

5

9

11

13

2. Thêm vào 15: Ngăn xếp SSS và mảng:

Ngăn xếp: [15,13,11,9,5,1] [15, 13, 11, 9, 5, 1] [15,13,11,9,5,1]

Mảng:

Chỉ số

0

1

2

3

4

5

Giá trị

1

5

9

11

13

15

3. Lấy ra 15: Ngăn xếp SSS và mảng:

Ngăn xếp: [13,11,9,5,1] [13, 11, 9, 5, 1] [13,11,9,5,1]

Mảng:

Chỉ số

0

1

2

3

4

Giá trị

1

5

9

11

13