TopStudy

Đáp án và lời giải

Giải SGK Chuyên đề Tin học 12 Bài 2. Kiểu dữ liệu ngăn xếp

Về trang đề

Câu 1

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Những kiểu dữ liệu sau có thể được dùng để thiết lập dữ liệu ngăn xếp:

a) Sử dụng kiểu mảng có chiều dài cố định N, với số tự nhiên N khá lớn.

c) Sử dụng kiểu dữ liệu list của Python.

Câu 2

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

- Có thể biểu diễn ngăn xếp bằng mảng 1 chiều.

- Cần có các biến nào để thực hiện các phép toán cơ bản trên ngăn xếp:

+ Biến S là danh sách rỗng.

+ Biến x là phần tử của mảng.

Câu 3

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Dãy các số 1, 2, 3, 4, 5, 6 lần lượt được đưa vào ngăn xếp S bằng lệnh push(). Người thực hiện làm như sau: Cứ thực hiện push(S,x) hai lần thì lại pop(S) một lần. Dãy số kết quả thu được bao gồm những số: 1,3,5.

Câu 4

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Giả sử chúng ta lần lượt thực hiện dãy các lệnh sau (ngăn xếp S ban đầu là rỗng). push(S,1); push(S,2); pop(S); push(S,3); pop(S); pop(S).

Dãy các phần tử lần lượt được đưa ra khỏi ngăn xếp là các số: 2,3,1.

Câu 5

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

- Hàm Stack() dùng để tạo ngăn xếp rỗng.

- Hàm Push(S,x) dùng để thêm x vào đỉnh của ngăn xếp, thêm x vào cuối danh sách bằng S bằng hàm append():

- Hàm Pop dùng để lấy ra phần tử tại đỉnh của top.

- Hàm Top trả về phần tử tại đỉnh của Top.

Câu 6

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Sửa lại hàm pop(S):

def pop(S):

if isEmptyStack(S):

raise ValueError(“Ngăn xếp rỗng không thể thực hiện được lệnh này”)

else:

return S.pop()

Sửa lại hàm top(S):

def top(S):

if isEmptyStack(S):

raise ValueError(“Ngăn xếp rỗng không thể thực hiện được lệnh này”)

else:

return S[len(S)-1]

Câu 7

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Vì đỉnh (top) của ngăn xếp S luôn là phần tử cuối cùng của danh sách S. Do vậy không cần biến top.

Vì đáy (bottom) của ngăn xếp S luôn là phần tử đầu tiên của danh sách S. Do vậy không cần biến bottom.

Câu 8

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

def length(S):

count = 0

while S:

S.pop()

count += 1

return count

Câu 9

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Các lệng theo trình tự là: push(S,2); push(S,7); pop(S); push(S,6); pop(S); push(S,1); push(S,7); push(S,6); pop(S); pop(S); pop(S); pop(S).

Câu 10

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

def is_valid_expression(expression):

# Khởi tạo ngăn xếp rỗng

stack = []

# Tạo một từ điển để ghép các dấu ngoặc đóng với dấu ngoặc mở tương ứng

matching_parentheses = {')': '(', '}': '{', ']': '['}

# Duyệt qua từng ký tự trong biểu thức

for char in expression:

if char in matching_parentheses.values():

stack.append(char)

elif char in matching_parentheses.keys():

if not stack or stack.pop() != matching_parentheses[char]:

return False

return not stack

Câu 11

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

def push(S, x):

try:

if not S.stackOverflow():

S.topldx += 1

S.T[S.topldx] = x

except ValueError as e:

print(e)

def pop(S):

if S.isEmpty():

raise IndexError(“Ngăn xếp rỗng!")

item = S.T[S.topldx]

S.T[S.topldx] = None

S.topldx -= 1

return item

def isEmptyStack(S):

return S.topldx == -1

def isFull(S):

return S.topldx == self.size - 1