Professional Documents
Culture Documents
• Vì stack là 1 dạng đặc biệt của danh sách liên kết nên ta có thể dùng kiểu dữ liệu
Node đã trình bày ở bài danh sách liên kết để biểu diễn kiểu dữ liệu của stack
• Định nghĩa 1 class Stack với kiểu dữ liệu generic T và 1 node trên cùng gọi là
top
• Kiểm tra xem ngăn xếp có nil không, nếu nil thì gán đỉnh ngăn xếp vào phần tử
muốn thêm vào.
• Nếu đỉnh ngăn xếp không nil, tạo 1 nút mới, gán phần tử muốn thêm vào nút đó,
gán đỉnh ngăn xếp vào nút vừa tạo.
2.3. Lấy 1 phần tử ra khỏi danh sách(pop)
• Kiểm tra danh sách đỉnh có rỗng không, nếu rỗng thì kết thúc.
• Nếu đỉnh danh sách không rỗng, kiểm tra nút đỉnh trỏ đến có rỗng không nếu
rỗng thì gán đỉnh danh sách bằng nil( trường hợp danh sách chỉ có 1 phần sau
khi lấy 1 phần tử ra thì danh sách trở thành rỗng), còn không gán đỉnh của danh
sách vào nút tiếp theo.
2.4. Xem phần tử đầu danh sách
• kiểm tra xem đỉnh của danh sách có rỗng không, nếu rỗng thì trả về nil còn không
trả về giá trị của đỉnh danh sách.
• Bài toán đảo ngược xâu ký tự yêu cầu hiển thị các ký tự của 1 xâu ký tự theo
chiều ngược lại.
• Ký tự cuối cùng của xâu sẽ được hiển thị trước, tiếp theo là ký tự sát ký tự cuối
… và ký tự đầu tiên sẽ được hiển thị đầu tiên.
• Để giải quyết bài toán, ta chỉ cần duyệt từ đầu đến cuối xâu, lần lượt cho các ký
tự vào ngăn xếp.
• Khi đó, các ký tự đầu tiên sẽ vào trước, tiếp theo đến ký tự thứ 2 … ký tự cuối
cùng vào sau cùng. Sau khi đã cho toàn bộ ký tự của xâu vào ngăn xếp, lần lượt
lấy các phần tử ra khỏi ngăn xếp và hiển thị lên màn hình.
3.2 Duyệt biểu thức hậu tố
Gặp toán hạng: đẩy vào stack - Gặp toán tử 1 ngôi: lấy ra 1 toán hạng trong stack, áp
dụng toán tử lên toán hạng và đẩy kết quả trở lại stack - Gặp toán tử 2 ngôi: lấy 2 toán
hạng ở đỉnh stack theo thứ tự, áp dụng toán tử lên 2 toán hạng đó, kết quả lại đẩy vào
stack - Kết thúc, đưa ra kết quả là giá trị ở đỉnh stack - Vd định giá biểu thức hậu tố.
3.3 Chuyển biểu thức dạng trung tố sang hậu tố
Duyệt lần lượt biểu thức trung tố từ trái qua phải - Gặp toán hạng: viết sang biểu thức
kết quả - Gặp toán tử có độ ưu tiên dưới 6 + Nếu stack rỗng hoặc đỉnh stack là toán tử
có độ ưu tiên nhỏ hơn hoặc là ' (' đẩy toán tử đang xét vào stack + Ngược lại: lấy các
toán tử ở đỉnh stack có độ ưu tiên lớn hơn hoặc bằng toán tử đang xét lần lượt đưa vào
biểu thức kết quả và đẩy toán tử đang xét vào stack - Gặp toán tử có độ ưu tiên 6 hoặc
' (' thì đẩy vào stack - Gặp ')' lấy tất cả những toán tử trong stack cho đến khi nào gặp
' (' đầu tiên, đưa sang biểu thức kết quả theo đúng thứ tự và đẩy một kí hiệu ' (' ra khỏi
stack - Nếu duyệt hết biểu thức trung tố, lấy nốt các toán tử trong stack đưa sang biểu
thức kết quả theo đúng thứ tự
3.4 Cách thực hiện
Chuyển đổi biểu thức tiền tố sang hậu tố:
Hàm này sẽ lấy và trả về giá trị của phần tử đang ở đầu hàng đợi
Hàm lấy kích thước của Hàng đợi, nói cách khác là số lượng phần tử đang có trên
hàng đợi
2. Hoạt động enqueue trong cấu trúc dữ liệu hàng đợi
Bởi vì cấu trúc dữ liệu hàng đợi duy trì hai con trỏ dữ liệu: front và rear, do đó các
hoạt động của loại cấu trúc dữ liệu này là khá phức tạp khi so sánh với cấu trúc dữ liệu
ngăn xếp.
Dưới đây là các bước để enqueue (chèn) dữ liệu vào trong hàng đợi: