1. Trang chủ
  2. » Thể loại khác

Tài Liệu - Võ Tấn Dũng (votandung) ď Bai Queue

9 67 0

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

THÔNG TIN TÀI LIỆU

  HÀNG ĐỢI (QUEUE) 1) Hàng đợi (Queue): - Hàng đợi đối tượng dùng để lưu trữ phần tử liệu (item) cách có thứ tự - Thêm item thêm vào đầu bên (đầu rear), lấy item lấy từ đầu bên (đầu front) - Các phần tử lưu vào lấy theo chế FIFO (First In First Out) - Có thể dùng mảng chiều danh sách liên kết đơn để xây dựng hàng đợi (queue) Nếu dùng mảng chiều ta có hai phương pháp phương pháp tịnh tiến phương pháp chạy vòng (xoay vòng) Các thao tác hàng đợi: - Kiểm tra hàng đợi rỗng hay chưa - Kiểm tra hàng đợi đầy hay chưa - Thêm phần tử vào hàng đợi (EnQueue) - Lấy phần tử khỏi hàng đợi (DeQueue) - Khởi tạo hàng đợi rỗng Chú ý: - Front: cho biết vị trí hàng đợi, nơi mà phần tử bị lấy khỏi hàng đợi - Rear: cho biết vị trí hàng đợi, nơi mà phần tử thêm vào Tóm lại: Front, vào Rear 2) Hiện thực hàng đợi mảng chiều với phương pháp tịnh tiến: n=6 phần tử n=6 phần tử 5 4 3 2 1 Rear Front Rear Front 0 -1 thêm giá trị 10 vào -1 n=6 phần tử Rear Front   10 n=6 phần tử 5 4 3 Rear 15 Front 15 10 -1 thêm 15, thêm -1 lấy 10 Môn CTDL&TT  bài Hàng đợi (Queue) – trang 1    Giả sử hàng đợi có nội dung hình sau Ta muốn thêm 105 vào hàng đợi phải làm sao? n=6 phần tử Rear Front n=6 phần tử 100 30 21 Rear Front -1 Đây trạng thái đầy giả, ta thêm vào Nếu muốn thêm vào phải tịnh tiến giá trị hàng đợi xuống phía Vì ta gọi phương pháp tịnh tiến 100 30 21 -1 Hàng đợi sau tịnh tiến n=6 phần tử Rear Rear Front n=6 phần tử 37 105 105 100 100 30 30 21 21 7 -1 Sau tịnh tiến, ta thêm 105 vào Front -1 Thêm tiếp 37 vào hàng đợi đầy thật Khai báo cấu trúc liệu cho hàng đợi: struct tqueue { int *queueArray; int n; int front,rear; }; typedef struct tqueue QUEUE; a) Hàm khởi tạo hàng đợi: void QueueInitialize(QUEUE &q, int spt) { q.queueArray = new int[spt]; q.n=spt; q.front=-1; q.rear=-1; } Môn CTDL&TT  bài Hàng đợi (Queue) – trang 2      b) Hàm kiểm tra hàng đợi rỗng hay chưa: bool IsEmpty(QUEUE q) { if(q.front==-1) return true; return false; } c) Hàm kiểm tra hàng đợi đầy hay chưa: Vì hàng đợi bị đầy giả (tức chưa đầy thật), viết: if(q.rear==q.n-1) không n=6 phần tử Rear Front 100 n=6 phần tử Rear 37 30 105 21 100 30 21 -1 Trạng thái đầy giả Front -1 Trạng thái đầy thật bool IsFull(QUEUE q) { if(q.rear-q.front==q.n-1) return true; return false; } d) Hàm thêm phần tử vào hàng đợi (EnQueue): bool AddItem(QUEUE &q, int in_item) { if(IsFull(q)) return false; if(IsEmpty(q)) q.front++; //q.front=0; if(q.rear==q.n-1) { for(int i=q.front;iq.rear) q.front=q.rear=-1; return true; } Môn CTDL&TT  bài Hàng đợi (Queue) – trang 4      f) Hàm xuất nội dung hàng đợi: void OutputToTestQueue(QUEUE q) { int i; n=6 phần tử if(IsEmpty(q)) { cout

Ngày đăng: 15/12/2017, 17:02

Xem thêm:

TỪ KHÓA LIÊN QUAN

w