Cấu Trúc Dữ Liệu Và Giải Thuật Chapter 4.2 Queue Trong Lập Trình

29 140 0
Cấu Trúc Dữ Liệu Và Giải Thuật  Chapter 4.2  Queue Trong Lập Trình

Đ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

Cấu Trúc Dữ Liệu Và Giải Thuật Chapter 4.2 Queue Trong Lập Trình Tài Liệu Bao Gồm 6 Chapter Mong các bạn theo dõi đầy đủ để đạt kết quả cao . Để Cập Nhật Thêm Tìm Hiểu Hơn Nữa Về Tài Liệu IT Thì Các Bạn Có Thể Truy Cập : https:123doc.orgtrangcanhan4336953tailieuit.htm CẢM ƠN CÁC BẠN ĐÃ THEO DÕI

Phần 2: Hàng đợi (Queue) Hàng đợi ( Queue) Theo chế FIFO (First In First Out)  Các đối tượng thêm vào hàng đợi lúc  Chỉ có đối tượng thêm vào phép lấy khỏi hàng đợi Giới thiệu Vào, liệu: Giới thiệu Ứng dụng hàng đợi:  Khử đệ qui  Lưu vết trình tìm kiếm theo chiều rộng quay lui, vét cạn  Quản lý phân phối tiến trình hệ điều hành, tổ chức đệm bàn phím, … Biếu diễn Queue Mảng chiều Danh sách liên kết Cấp phát động! Kích thước stack thiếu, lúc thừa Push/Pop dễ dàng Push / Pop phức tạp Biểu diễn Queue dùng mảng Biểu diễn Queue mảng:  Mảng chiều Ary lưu phần tử liệu  Hằng số N cho biết kích thước (số phần tử tối đa) hàng đợi  Hai biến nguyên front, rear cho biết số đầu cuối hàng đợi Biểu diễn Queue mảng typedef struct item { int data; }; typedef struct queue { int front, rear; item A[N]; }; Cấu trúc phần tử liệu Cấu trúc hàng đợi Biểu diễn Queue mảng Các thao tác Queue  Khởi tạo Queue: Init (q)  Kiểm tra Queue rỗng: IsEmpty (q)  Kiểm tra Queue đầy: IsFull (q)  Thêm phần tử vào Queue: Add(q, x)  Lấy phần tử khỏi Queue: Remove (q) 179/44 Biểu diễn Queue dùng mảng  Khởi tạo Queue:  Lệnh khởi tạo front = rear = tạo queue rỗng  Đảm bảo thao tác queue thực đắn Thuật toán: +Vào: Queue cần khởi tạo + Ra: Queue sau khởi tao B1) Gán front = 0; rear = -1 BKT) Kết thúc; Cài đặt: void Init(queue &q) { q.front = 0; rear = -1; } Biểu diễn Queue dùng mảng  Kiểm tra Queue rỗng:  Được gọi đến trước thực thao tác lấy phần tử khỏi queue  Queue rống front = front > rear Thuật toán: +Vào: Queue cần kiểm tra + Ra: giá trị B1) if front = or front > rear then return 1; else return 0; BKT) Kết thúc; Cài đặt: int IsEmpty(Queue q) { if (q.front > q.rear) return 1; return 0; } 10 Biểu diễn Queue dùng mảng Lấy phần tử khỏi hàng đợi Cài đặt: item Remove (queue &q) { item x; if (!Empty(q)) { item x = q.A[q.front]; q.front++; return x; } } 15 Biểu diễn Queue dùng mảng Nhận xét:  Ưu điểm: • Các thao tác queue làm việc với chi phí O(1) • Việc cài đặt queue thông qua mảng chiều đơn giản hiệu  Hạn chế: • Giới hạn kích thước queue N • Giá trị N nhỏ so với nhu cầu thực tế lớn làm lãng phí nhớ Khắc phục: Sử dụng DSLK đơn để biểu diễn queue 16 Biểu diễn Queue DSLK Có thể tạo hàng đợi sử dụng DSLK đơn Phần tử đầu DSKL (pHead) phần tử đầu hàng đợi, phần tử cuối DSKL (pTail) phần tử cuối hàng đợi Đầu hàng Cuối hàng a0 a1 a2 17 aN-2 an-1 Biểu diễn Queue DSLK typedef struct node { int data; node *Next; }; typedef struct queue { node *front, *rear; }; 18 Biểu diễn Queue DSLK Các thao tác Queue  Khởi tạo queue: Init (q)  Kiểm tra queue rỗng: IsEmpty (q)  Tạo nút chứa liệu x: CreateNode(x)  Thêm phần tử vào queue: Add(q, x)  Lấy phần tử khỏi queue: Remove (q) 19 179/44 Biểu diễn Queue dùng mảng  Khởi tạo Queue:  Lệnh khởi tạo front = rear = NULL tạo queue rỗng Thuật toán: +Vào: Queue cần khởi tạo + Ra: Queue sau khởi tao B1) Gán front = rear = NULL BKT) Kết thúc; 20 Cài đặt: void Init(queue &q) { q.front = q.rear = NULL; } Biểu diễn Queue dùng mảng  Kiểm tra Queue rỗng:  Queue rỗng front = NULL Thuật toán: +Vào: Queue cần kiểm tra + Ra: giá trị B1) if front = NULL then return 1; else return 0; BKT) Kết thúc; 21 Cài đặt: int IsEmpty(Queue q) { if (q.front == NULL) return 1; return 0; } Biểu diễn Stack dùng DSLK Tạo nút: Node* CreateNode (int x) { Node *p; p = (Node*) malloc (sizeof(Node)); if (p==NULL) { printf (“Khong du bo nho!”); return NULL; } p->data=x; p->next=NULL; return p; } 22 Biểu diễn Stack dùng mảng Thêm phần tử vào queue  Việc thêm phần tử thực cuối hàng đợi Thuật toán  Vào: Queue q, phần tử liệu x  Ra: q với phần tử liệu x cuối hàng đợi B1) NewNode  Tạo nút chứa liệu x; B2) Nếu tạo nút thành cơng - Kiểm tra front = NULL front = rear = NewNode 23 Biểu diễn Stack dùng mảng B3) Ngược lại, chèn vào cuối danh sách: + q.rear->Next = NewNode; + q.rear = NewNode; BKT) Kết thúc; 24 Biểu diễn Queue DSLK Thêm phần tử vào queue Cài đặt: void Add (queue &q, node *NewNode){ if(q.front == NULL){ q.front = NewNode; q.rear = NewNode; } else{ q.rear->Next = NewNode; q.rear = NewNode; } 25 } Biểu diễn Queue dùng mảng Lấy phần tử khỏi queue Thuật toán  Vào: Queue q;  Ra: Phần tử đầu hàng đợi p B1) Kiểm tra queue rỗng thực BKT; Ngược lại, thực B2; B2) Lấy phần tử khỏi hàng đợi 2.1) p  giá trị phần tử đầu hàng đợi (front); 2.2) Điều chỉnh front = front->Next; BKT) Kết thúc; 26 Biểu diễn Queue DSLK Lấy phần tử khỏi queue Cài đặt: Node* Remove(queue &q){ if (!Empty(q)) { node *p = q.front; q.front = p->Next; return p } } 27 Biểu diễn Queue DSLK Nhận xét:  Các thao tác hàng đợi biểu diễn danh sách liên kết làm việc với chi phí O(1)  Nếu khơng quản lý phần tử cuối xâu, thao tác Remove có độ phức tạp O(n) 28 Sử dụng Queue Hàng đợi sử dụng số toán:  Bài toán „sản xuất tiêu thụ‟ (ứng dụng hệ điều hành song song)  Bộ đệm (ví dụ: Nhấn phím  Bộ đệm  CPU xử lý)  Xử lý lệnh máy tính (ứng dụng HĐH, trình biên dịch), hàng đợi tiến trình chờ xử lý, … 29 ... Biểu diễn Queue mảng typedef struct item { int data; }; typedef struct queue { int front, rear; item A[N]; }; Cấu trúc phần tử liệu Cấu trúc hàng đợi Biểu diễn Queue mảng Các thao tác Queue  Khởi... mảng Thêm phần tử vào queue  Việc thêm phần tử thực cuối hàng đợi Thuật toán  Vào: Queue q, phần tử liệu x  Ra: q với phần tử liệu x cuối hàng đợi B1) NewNode  Tạo nút chứa liệu x; B2) Nếu... diễn Queue dùng mảng  Khởi tạo Queue:  Lệnh khởi tạo front = rear = tạo queue rỗng  Đảm bảo thao tác queue thực đắn Thuật toán: +Vào: Queue cần khởi tạo + Ra: Queue sau khởi tao B1) Gán front

Ngày đăng: 11/04/2019, 17:41

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan