Giải chuyên đề Khoa học máy tính 12 kết nối: Bài 2 Kiểu dữ liệu ngăn xếp
Hướng dẫn giải Chuyên đề Tin học 12 - Khoa học máy tính kết nối tri thức: Giải bài 2 Kiểu dữ liệu ngăn xếp. Bài được giải chi tiết, rõ ràng, dễ hiểu. Bài giải giúp học sinh nắm vững kiến thức trong sách giáo khoa, rèn kĩ năng giải bài tập và có phương pháp học tập hiệu quả.
Nội dung chi tiết
KHỞI ĐỘNG
Theo em, những kiểu dữ liệu sau có thể được dùng để thiết lập dữ liệu ngăn xếp không? Tại sao?
a) Sử dụng kiểu mảng có chiều dài cố định N, với số tự nhiên N khá hơn.
b) Sử dụng kiểu dữ liệu danh sách liên kết (đã học ở chương trình Tin học 11 – Định hướng Khoa học máy tính).
c) Sử dụng kiểu dữ liệu list của Python.
Giải chi tiết:
a) Có thể sử dụng: Mảng có thể được sử dụng để mô phỏng ngăn xếp vì nó cho phép truy cập và thao tác dữ liệu theo kiểu LIFO.
b) Có thể sử dụng: Danh sách liên kết là lựa chọn lý tưởng cho ngăn xếp vì nó hỗ trợ truy cập và thao tác dữ liệu theo kiểu LIFO một cách hiệu quả.
c) Có thể sử dụng: Kiểu dữ liệu list của Python được triển khai dựa trên danh sách liên kết, do đó nó có thể được sử dụng để mô phỏng ngăn xếp.
1. Biểu diễn ngăn xếp băng mảng 1 chiều
Hoạt động 1
Quan sát, trao đổi, thảo luận để tìm hiểu cách biểu diễn ngăn xếp bằng mảng một chiều. Trả lời các câu hỏi sau:
- Có thể biểu diễn ngăn xếp bằng mảng một chiều được không?
- 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?
Giải chi tiết:
- Có thể biểu diễn ngăn xếp bằng mảng một chiều.
- Các biến dùng để thực hiện các phép toán cơ bản trên ngăn xếp là: push(S,x); pop(S)
Câu hỏi 1: 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ố nào?
Giải chi tiết:
Dãy số thu được là: 1, 3, 5
Câu hỏi 2: 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ố nào?
Giải chi tiết:
Các phần tử lần lượt được đưa ra khỏi ngăn xếp là: 2, 3, 1
2. Các phép toán của kiểu dữ liệu ngăn xếp
Hoạt động 2: Tìm hiểu các hàm cơ bản của ngăn xếp
Đọc, trao đổi để biết các hàm cơ bản của ngăn xếp được cài đặt bằng danh sách (kiểu list của Python).
Giải chi tiết:
- 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 hỏi 1: Sửa lại hàm pop(S) và top(S) trong hoạt động trên như sau: Nếu ngăn xếp rỗng thì thông báo: “Ngăn xếp rỗng không thể thực hiện được lệnh này”.
Giải chi tiết:
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 hỏi 2: Vì sao các hàm cơ bản trên ngăn xếp S được cài đặt bằng danh sách (kiểu list của Python) không cần sử dụng biến top và biến bottom?
Giải chi tiết:
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.
LUYỆN TẬP
Câu 1. Viết hàm length(S) trả về số phần tử của ngăn xếp S.
Giải chi tiết:
def length(S):
count = 0
while S:
S.pop()
count += 1
return count
Câu 2. Giả sử dãy số ban đầu là 2, 7, 6, 1 và S là ngăn xếp rỗng. Chúng ta lần lượt thực hiện các thao tác push(S,x), pop(S) với dãy số trên từ trái sang phải. Kết quả các số lần lượt được đưa ra khỏi ngăn xếp là 6, 7, 1, 2. Hãy viết các lệnh theo trình tự đã thực hiện.
Giải chi tiết:
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).
VẬN DỤNG
Câu 1. Xâu kí tự được gọi là biểu thức nếu nó là rỗng hoặc chỉ chứa các ki tự “(“ và “)”
Ví dụ: "((()())())". Xâu biểu thức được gọi là đúng nếu vị trí các dáu ngoặc được sắp xếp hợp lí theo tự nhiên. Ví dụ các xâu sau là biểu thức đúng:
()
(()())
Ví dụ các xâu biểu thức sau là sai:
((())
))()()
Có thể định nghĩa khái niệm biểu thức đúng bằng đệ quy như sau:
- Xâu rỗng là đúng.
- Nếu xâu A, B đúng thì xâu AB đúng.
- Nếu xâu A là đúng thì xâu (A) đúng.
Cho trước xâu biểu thức A, viết chương trình kiểm tra xem A có là biểu thức đúng hay không. Yêu cầu sử dụng kiểu dữ liệu ngăn xếp.
Giải chi tiết:
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 2. Ngăn xếp S được cài đặt bằng mảng T có N phân tử, phần tử đầu tiên có chỉ số 0. Hãy viết các hàm cơ bản trên ngăn xếp S.
Lưu ý:
- Biến topldx cho biết đỉnh top của ngăn xếp.
- Ngăn xếp là rỗng thì topldx = -1. Khi topldx = N-1 thì ngăn xếp bị tràn (overflow), không thể thêm phần tử mới vào ngăn xếp S.
- Viết hàm stackOverflow(S) trả về True nếu ngăn xếp S bị tràn; ngược lại trả về False. Hàm stackOverflow(S) sẽ tạo ngoại lệ ValueError(). Sử dụng hàm stackOverflow(S) để kiểm tra ngăn xếp S chưa bị tràn trước khi gọi hàm push(S, x)
Giải chi tiết:
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
Tài liệu cùng môn học
- Trắc nghiệm khoa học máy tính 12 kết nối tri thức
- Giáo án word tin học khoa học máy tính 12 kết nối tri thức
- Giáo án ppt tin học khoa học máy tính 12 kết nối tri thức
- Giáo án chuyên đề tin học khoa học máy tính 12 kết nối tri thức
- Giáo án ppt chuyên đề tin học khoa học máy tính 12 kết nối tri thức
- Giải tin học khoa học máy tính 12 kết nối tri thức
- Giải chuyên đề khoa học máy tính 12 kết nối tri thức
- Lý thuyết khoa học máy tính 12 kết nối tri thức
- Bài tập củng cố Khoa học máy tính 12 kết nối tri thức
- Trắc nghiệm đúng sai khoa học máy tính 12 kết nối tri thức
- Trắc nghiệm trả lời ngắn khoa học máy tính 12 kết nối tri thức
- Đề thi tin học khoa học máy tính 12 kết nối tri thức
- Ppt trò chơi AI Tin học 12 Khoa học máy tính Kết nối tri thức
- Video AI mở đầu Tin học 12 Khoa học máy tính kết nối tri thức
Tài liệu khác
- Trắc nghiệm văn 12 kết nối tri thức
- Trắc nghiệm địa lí 12 kết nối tri thức
- Trắc nghiệm hóa học 12 kết nối tri thức
- Trắc nghiệm KTPL 12 kết nối tri thức
- Trắc nghiệm lịch sử 12 kết nối tri thức
- Trắc nghiệm sinh học 12 kết nối tri thức
- Trắc nghiệm toán 12 kết nối tri thức
- Trắc nghiệm quốc phòng 12 kết nối tri thức
- => Xem nhiều môn hơn