Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 9: Cấu trúc dữ liệu hàng đợi cung cấp cho người học các kiến thức: Danh sách kiểu hàng đợi (Queue), cấu trúc dữ liệu trừu tượng queue, cài đặt queue bằng mảng,.... Mời các bạn cung cấp cho người học các kiến thức.
Bài Cấu trúc liệu hàng đợi Danh sách kiểu Hàng đợi (Queue) Queue cách tổ chức lưu trữ đối tượng dạng danh sách tuyến tính mà việc bổ sung đối tượng thực đầu danh sách việc lấy đối tượng thực cuối danh sách Queue gọi danh sách kiểu FIFO (First In First Out - vào trước trước) Cấu trúc liệu trừu tượng Queue (The Queue ADT) Queue ADT lưu trữ đối tượng Thêm vào xóa (lấy ra) theo kiểu FIFO Thêm vào thực cuối queue lấy thực đầu queue Các phép toán thực queue: • • enqueue(Object o): bổ sung phần tử o vào cuối queue dequeue(Object &o): Xóa phần tử đầu queue Các phép tốn bổ trợ • • • front(): trả lại phần tử đầu queue khơng xóa size(): trả lại số phần tử lưu trữ queue isEmpty(): trả lại giá trị kiểu boolen để xác định có phần tử lưu trữ queue không? Ngoại lệ: thực dequeue enqueue queue rỗng đầy ta cần phải chuyển đến ngoại lệ Một số ứng dụng queue Các ứng dụng trực tiếp - Danh sách hàng đợi - Truy nhập nguồn dùng chung (ví dụ máy in mạng cục bộ) - Đa lập trình Các ứng dụng không trực tiếp - Cấu trúc liệu hỗ trợ cho thuật toán - Làm thành phần cấu trúc liệu khác Cài đặt queue mảng Sử dụng mảng kiểu vịng có kích thước N Sử dụng biến lưu trữ số phần tử trước phần tử sau: f lưu số phần tử trước r lưu trữ số phần tử chuẩn bị đưa vào Vị trí r mảng rỗng Cấu hình bình thường Cấu hình vịng lại Các phép tốn queue Chúng ta sử dụng phép toán modulo để xác định số phần tử lại queue Các phép toán queue (tiếp) Phép toán ensqueue dẫn đến ngoại lệ mảng đầy Algorthim enqueue(Object o) if size()=N-1 then return else Q[r]←o r←(r+1) mod N return 1; Các phép toán queue (tiếp) Phép toán dequeue dẫn đến ngoại lệ mảng rỗng Algorthim dequeue(Object &o) if isEmpty() then return else o←Q[f] f←(f+1) mod N return Phát triển queue dựa mảng Khi thêm phần tử vào mảng, xảy ngoại lệ Để tránh điều ta sử dụng mảng có kích thước lớn Tương tự phát triển stack dựa mảng Thời gian thực thuật toán là: - O(n) với chiến lược gia tăng - O(1) với chiến lược gấp đôi Cài đặt queue C++ ADT queue không phù hợp cài đặt C++ (trên DOS) yêu cầu định nghĩa lớp có cho phép dẫn đến ngoại lệ Tuy nhiên sử dụng C++ để cài đặt queue #define N //const integer template class Queue{ private: Object Q[N]; int f, r; public: Queue(); int isEmpty(); int size(); Object front(); int enqueue(Object o); int dequeue(Object &o); }; Cài đặt queue C++ int Queue::enqueue(Object o){ if (size()=N-1) return 0; else{ Q[r]=o; r =(r+1)%N; return 1; } } Bài tập Cài đặt lớp Queue mẫu cách sử dụng mảng Cài đặt Queue mẫu cách sử dụng danh sách liên kết Cài đặt lớp ứng dụng sử dụng lớp Queue để tổ chức lưu trữ đối tượng số nguyên Lớp có chức năng: 3 Thêm vào Queue phần tử Lấy phần tử khỏi queue hiển thị lên hình Cho biết số phần tử có Queue Cho biết Queue rỗng hay đầy ... tiếp - Danh sách hàng đợi - Truy nhập nguồn dùng chung (ví dụ máy in mạng cục bộ) - Đa lập trình Các ứng dụng khơng trực tiếp - Cấu trúc liệu hỗ trợ cho thuật toán - Làm thành phần cấu trúc liệu. .. FIFO (First In First Out - vào trước trước) Cấu trúc liệu trừu tượng Queue (The Queue ADT) Queue ADT lưu trữ đối tượng Thêm vào xóa (lấy ra) theo kiểu FIFO Thêm vào thực cuối queue lấy... thêm phần tử vào mảng, xảy ngoại lệ Để tránh điều ta sử dụng mảng có kích thước lớn Tương tự phát triển stack dựa mảng Thời gian thực thuật toán là: - O(n) với chiến lược gia tăng - O(1) với chiến