1. Trang chủ
  2. » Luận Văn - Báo Cáo

Bài giảng Cấu trúc dữ liệu và giải thuật: Ngăn xếp và hàng đợi - Nguyễn Mạnh Hiển

33 0 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Ngăn xếp & Hàng đợi
Tác giả Nguyễn Mạnh Hiển
Trường học Trường Đại Học Thủy Lợi
Chuyên ngành Công nghệ thông tin
Thể loại Bài giảng
Định dạng
Số trang 33
Dung lượng 0,98 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Ngăn xếp stack• Một danh sách theo kiểu vào sau ra trước LIFO Last In First Out • Các thao tác chỉ xảy ra ở đỉnh ngăn xếp topOfStack... Cài đặt ngăn xếp 1• Bằng danh sách liên kết đơn: •

Trang 1

Ngăn xếp & Hàng đợi (Stack & Queue)

Nguyễn Mạnh Hiển

Khoa Công nghệ thông tin

hiennm@tlu.edu.vn

Trang 2

Ngăn xếp (stack)

• Một danh sách theo kiểu vào sau ra trước

LIFO (Last In First Out)

• Các thao tác chỉ xảy ra ở đỉnh ngăn xếp (topOfStack)

Trang 3

Cài đặt ngăn xếp (1)

• Bằng danh sách liên kết đơn:

• Các thao tác:

− push: chèn vào đầu danh sách (push_front)

− pop: xóa khỏi đầu danh sách (pop_front)

− top: truy nhập phần tử ở đầu danh sách (front) head

Trang 4

Cài đặt ngăn xếp (2)

• Cài đặt bằng mảng (theArray):

• push: topOfStack++, theArray[topOfStack] = x

• pop:

topOfStack • top: return theArray[topOfStack]

• Chú ý khi ngăn xếp rỗng: topOfStack = -1

theArray topOfStack = 3

0 1 2 3 4 5 6 7 8

Trang 5

Các ứng dụng của ngăn xếp

• Cân bằng ký hiệu trong mã nguồn, cân bằng thẻ (trong một trang HTML)

• Định giá biểu thức hậu tố

• Chuyển biểu thức từ trung tố sang hậu tố

• Tổ chức các lời gọi hàm

Trang 14

Định giá biểu thức hậu tố

• Ví dụ: cần định giá biểu thức (trung tố) sau:

4,99 1,06 ∗ 5,99 + 6,99 1,06 ∗ +

Trang 15

Định giá: 6 5 2 3 + 8 ∗ + 3 + ∗

• Quy tắc:

− Gặp toán hạng  đặt vào ngăn xếp

− Gặp toán tử  lấy hai toán hạng ra khỏi

ngăn xếp và áp dụng toán tử  đặt kết quả trở lại ngăn xếp

Trang 16

Định giá: 6 5 2 3 + 8 ∗ + 3 + ∗

• Đặt bốn toán hạng đầu vào ngăn xếp

Trang 17

Định giá: 6 5 2 3 + 8 ∗ + 3 + ∗

• Đọc “+”, lấy 3 và 2 ra, cộng lại được 5 và đặt 5 vào ngăn xếp

Trang 18

Định giá: 6 5 2 3 + 8 ∗ + 3 + ∗

• Đặt 8 vào ngăn xếp

Trang 19

Định giá: 6 5 2 3 + 8 ∗ + 3 + ∗

• Đọc “∗”, lấy ra 8 và 5, nhân vào được 40 và đặt vào ngăn xếp

Trang 20

Định giá: 6 5 2 3 + 8 ∗ + 3 + ∗

• Đọc “+”, lấy ra 40 và 5, cộng lại được 45 và đặt vào ngăn xếp

Trang 21

Định giá: 6 5 2 3 + 8 ∗ + 3 + ∗

• Đặt 3 vào ngăn xếp

Trang 22

Định giá: 6 5 2 3 + 8 ∗ + 3 + ∗

• Đọc “+”, lấy ra 3 và 45, cộng lại được 48 và đặt vào ngăn xếp

Trang 24

Chuyển biểu thức từ trung tố sang hậu tố

 Đọc thêm trong sách!

Trang 25

Ngăn xếp thời gian chạy

• Môi trường thời gian chạy:

− Bộ nhớ tĩnh (static):

• Mã thực thi

• Các biến toàn cục

− Ngăn xếp (stack):

push cho mỗi lời gọi hàm

pop cho mỗi lần hàm trở về (return)

bộ nhớ chương trình

Trang 26

Hàng đợi (queue)

• Một danh sách theo kiểu vào trước ra trước

FIFO (First In First Out)

• Hai thao tác cơ bản:

− enqueue: chèn phần tử vào cuối danh sách

− dequeue: xóa phần tử ở đầu danh sách

Trang 27

Cài đặt hàng đợi

• Như trường hợp ngăn xếp, có thể dùng mảng hoặc danh sách liên kết để cài đặt hàng đợi

• Các thao tác đều rất nhanh: O(1)

• Ở đây chúng ta chỉ xem xét cài đặt bằng mảng:

theArray

currentSize = 4

Trang 28

Cài đặt hàng đợi bằng mảng

• Hàng đợi này chỉ chứa được 10 phần tử  nhanh chóng đầy !

 thực tế hàng đợi thường chỉ cần nhỏ nếu các thao tác

enqueue và dequeue xảy ra thường xuyên

• Sau 10 lần enqueue, back ở vị trí cuối cùng  không thể

enqueue thêm  giải pháp mảng vòng tròn !

theArray

currentSize = 4

Trang 29

Mảng vòng tròn

Trạng thái ban đầu

Sau enqueue(1)

Trang 30

Mảng vòng tròn

Sau dequeue (trả về 2) Sau enqueue(3)

Trang 31

Mảng vòng tròn

Sau dequeue (trả về 1) Sau dequeue (trả về 4)

Trang 32

Mảng vòng tròn

Chú ý: hàng đợi rỗng khi currentSize = 0

Sau dequeue (trả về 3)

Trang 33

Ứng dụng của hàng đợi

• Xếp vào hàng đợi các tác vụ in ấn khi gửi tới

máy in

• Các cuộc gọi tới một công ty khi tất cả các

nhân viên trực đều bận

• Các gói tin gửi từ nguồn tới đích, được xếp vào hàng đợi để chờ xử lý

Ngày đăng: 15/10/2023, 05:32

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm