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

Định dạng
Số trang 33
Dung lượng 0,98 MB

Nội dung

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 Ngăn xếp (stack) • Một danh sách theo kiểu vào sau trước LIFO (Last In First Out) • Các thao tác xảy đỉnh ngăn xếp (topOfStack) − push: Thêm phần tử − pop: Xóa phần tử − top: Truy nhập phần tử đỉnh ngăn xếp  ba thao tác thời gian O(1) Cài đặt ngăn xếp (1) • Bằng danh sách liên kết đơn: head • 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) Cài đặt ngăn xếp (2) • Cài đặt mảng (theArray): theArray • • • • 5 topOfStack = push: topOfStack++, theArray[topOfStack] = x pop: topOfStack-top: return theArray[topOfStack] Chú ý ngăn xếp rỗng: topOfStack = -1 Các ứng dụng ngăn xếp • Cân ký hiệu mã nguồn, cân thẻ (trong 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 lời gọi hàm Định giá: + ∗ + + ∗ • Đọc “∗”, lấy 5, nhân vào 40 đặt vào ngăn xếp Định giá: + ∗ + + ∗ • Đọc “+”, lấy 40 5, cộng lại 45 đặt vào ngăn xếp Định giá: + ∗ + + ∗ • Đặt vào ngăn xếp Định giá: + ∗ + + ∗ • Đọc “+”, lấy 45, cộng lại 48 đặt vào ngăn xếp Định giá: + ∗ + + ∗ • Đọc “∗”, lấy 48 6, nhân vào 288 đặt vào ngăn xếp • Thời gian định giá biểu thức hậu tố O(n) Chuyển biểu thức từ trung tố sang hậu tố  Đọc thêm sách! 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 tồn cục − Ngăn xếp (stack): • push cho lời gọi hàm • pop cho lần hàm trở (return) • Các biến cục − Heap: • Các khối nhớ cấp phát động • new delete heap ngăn xếp nhớ tĩnh nhớ chương trình Hàng đợi (queue) • Một danh sách theo kiểu vào trước trước FIFO (First In First Out) • Hai thao tá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 dequeue đầu enqueue cuối Cài đặt hàng đợi • Như trường hợp ngăn xếp, dùng mảng danh sách liên kết để cài đặt hàng đợi • Các thao tác nhanh: O(1) • Ở xem xét cài đặt mảng: theArray currentSize = Cài đặt hàng đợi mảng theArray currentSize = • enqueue: currentSize++, back++, theArray[back] = x • dequeue: currentSize , front++ • Hàng đợi chứa 10 phần tử  nhanh chóng đầy !  thực tế hàng đợi thường cần nhỏ thao tác enqueue dequeue xảy thường xuyên • Sau 10 lần enqueue, back vị trí cuối  khơng thể enqueue thêm  giải pháp mảng vòng tròn ! Mảng vòng tròn Trạng thái ban đầu Sau enqueue(1) Mảng vòng tròn Sau enqueue(3) Sau dequeue (trả 2) Mảng vòng tròn Sau dequeue (trả 4) Sau dequeue (trả 1) Mảng vòng tròn Sau dequeue (trả 3) Chú ý: hàng đợi rỗng currentSize = Ứng dụng hàng đợi • Xếp vào hàng đợi tác vụ in ấn gửi tới máy in • Các gọi tới công ty tất nhân viên trực bận • Các gói tin gửi từ nguồn tới đích, xếp vào hàng đợi để chờ xử lý

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