Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 19 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
19
Dung lượng
157,49 KB
Nội dung
Please purchase a personal license QUEUE KHÁI NIỆM Hàng đợi danh sách tuyến tính, đó: Việc bổ sung phần tử vào hàng đợi thực đầu gọi cuối hàng Việc loại bỏ phần tử khỏi hàng đợi thực đầu gọi đầu hàng Danh sách kiểu hàng đợi gọi danh sách FIFO – First In First Out KHÁI NIỆM A B C D E F Bổ sung Loại bỏ Đầu hàng Cuối hàng Hình vẽ biểu diễn hàng đợi BIỂU DIỄN CẤU TRÚC DỮ LIỆU Giả sử phần tử HĐ có kiểu liệu Item, độ dài HĐ N HĐ lưu BNMT mảng chiều (lưu trữ kế tiếp) Mỗi phần tử mảng lưu phần tử hàng đợi Hàng đợi biểu diễn cấu trúc có thành phần: Thành phần thứ mảng E lưu phần tử HĐ Thành phần thứ hai biến front lưu số phần tử đầu hàng Thành phần thứ ba biến rear lưu số phần tử cuối hàng Cấu trúc liệu sau: BIỂU DIỄN CẤU TRÚC DỮ LIỆU E A B C D E F front = rear = Mảng lưu trữ hàng đợi = Max-1 BIỂU DIỄN CẤU TRÚC DỮ LIỆU #define Max N //Định nghĩa kiểu Item struct Queue{ int front, rear; Item E[Max]; }; Queue Q; /* Q.rear = -1 -> hàng đợi rỗng, Q.rear = Max-1 -> Hàng đợi đầy */ CÁC PHÉP TOÁN TRÊN HÀNG ĐỢI Khởi tạo hàng đợi rỗng void Initialize (Queue &Q) { Q.front = 0; Q.rear = -1; } Kiểm tra hàng đợi rỗng int Empty (Queue Q) { return (Q.rear == -1); } CÁC PHÉP TOÁN TRÊN HÀNG ĐỢI Max=10 E front = rear = -1 Biểu diễn hàng đợi rỗng CÁC PHÉP TOÁN TRÊN HÀNG ĐỢI Kiểm tra hàng đợi đầy int Full (Queue Q) { reurn (Q.rear == Max-1); } E 10 = Max A B C D E F G H front = Biểu diễn hàng đợi đầy rear = CÁC PHÉP TOÁN TRÊN HÀNG ĐỢI Bổ sung phần tử vào cuối hàng đợi 10 = Max E A B C D E F X front = rear = Mảng lưu trữ hàng đợi G CÁC PHÉP TOÁN TRÊN HÀNG ĐỢI Bổ sung phần tử vào cuối hàng đợi 10 = Max E A B C D E F X front = Mảng lưu trữ hàng đợi rear = G CÁC PHÉP TOÁN TRÊN HÀNG ĐỢI Bổ sung phần tử vào cuối hàng đợi E A B C D E F front = Mảng lưu trữ hàng đợi 10 = Max G rear = CÁC PHÉP TOÁN TRÊN HÀNG ĐỢI Bổ sung phần tử vào cuối hàng đợi int AddQ(Queue &Q, Item X) { If (Full(Q)) return 0; else { Q.rear++; Q.E[Q.rear] = X; return 1; } } Hàm AddQ thực bổ sung phần tử vào cuối hàng, hàm trả bổ sung thành công, ngược lại hàm trả CÁC PHÉP TOÁN TRÊN HÀNG ĐỢI Lấy phần tử đầu hàng đợi Trường hợp hàng đợi có nhiều phần tử 10 = Max E A B C D E F X front = rear = Mảng lưu trữ hàng đợi CÁC PHÉP TOÁN TRÊN HÀNG ĐỢI Lấy phần tử đầu hàng đợi Trường hợp hàng đợi có nhiều phần tử 10 = Max E B C D E F X A front = rear = Mảng lưu trữ hàng đợi CÁC PHÉP TOÁN TRÊN HÀNG ĐỢI Lấy phần tử đầu hàng đợi Trường hợp hàng đợi có phần tử E 10 = Max B rear = X front = Mảng lưu trữ hàng đợi CÁC PHÉP TOÁN TRÊN HÀNG ĐỢI Lấy phần tử đầu hàng đợi Trường hợp hàng đợi có phần tử 10 = Max E B front = rear = -1 X Hàng đợi rỗng CÁC PHÉP TOÁN TRÊN HÀNG ĐỢI Lấy phần tử đầu hàng đợi int DeleteQ(Queue &Q, Item &X) { if (Empty(Q)) return 0; else { X = Q.E[Q.front]; if (Q.front == Q.rear) Initialize(Q); else Q.front = Q.front + 1; return 1; } } Hàm DeleteQ thực lấy phần tử đầu hàng, hàm trả lấy thành công, ngược lại hàm trả ỨNG DỤNG Viết chương trình: Nhập chuỗi ký tự, sử dụng hàng đợi, việc nhập kết thúc gõ Enter In chuỗi hình Đếm nguyên âm chuỗi [...]... đợi 10 = Max 0 E 1 2 3 4 5 6 7 A B C D E F 8 9 X front = 2 Mảng lưu trữ hàng đợi rear = 8 G CÁC PHÉP TOÁN TRÊN HÀNG ĐỢI 4 Bổ sung một phần tử vào cuối hàng đợi 0 E 1 2 3 4 5 6 A B C D E 7 F front = 2 Mảng lưu trữ hàng đợi 8 10 = Max 9 G rear = 8 CÁC PHÉP TOÁN TRÊN HÀNG ĐỢI 4 Bổ sung một phần tử vào cuối hàng đợi int AddQ(Queue &Q, Item X) { If (Full(Q)) return 0; else { Q.rear++; Q.E[Q.rear] = X; return... = Max 0 E 1 2 3 4 5 6 7 B C D E F 8 X A front = 3 rear = 7 Mảng lưu trữ hàng đợi 9 CÁC PHÉP TOÁN TRÊN HÀNG ĐỢI 5 Lấy ra một phần tử ở đầu hàng đợi Trường hợp hàng đợi có 1 phần tử 0 E 1 2 3 4 5 10 = Max 6 7 B rear = 3 X front = 3 Mảng lưu trữ hàng đợi 8 9 CÁC PHÉP TOÁN TRÊN HÀNG ĐỢI 5 Lấy ra một phần tử ở đầu hàng đợi Trường hợp hàng đợi có 1 phần tử 10 = Max 0 1 2 3 4 5 6 7 8 9 E B front = 0 rear... Q.E[Q.rear] = X; return 1; } } Hàm AddQ thực hiện bổ sung một phần tử vào cuối hàng, hàm trả về 1 nếu bổ sung thành công, ngược lại hàm trả về 0 CÁC PHÉP TOÁN TRÊN HÀNG ĐỢI 5 Lấy ra một phần tử ở đầu hàng đợi Trường hợp hàng đợi có nhiều hơn 1 phần tử 10 = Max 0 E 1 2 3 4 5 6 7 A B C D E F 8 X front = 2 rear = 7 Mảng lưu trữ hàng đợi 9 CÁC PHÉP TOÁN TRÊN HÀNG ĐỢI 5 Lấy ra một phần tử ở đầu hàng đợi Trường... front = 0 rear = -1 X Hàng đợi rỗng CÁC PHÉP TOÁN TRÊN HÀNG ĐỢI 5 Lấy ra một phần tử ở đầu hàng đợi int DeleteQ(Queue &Q, Item &X) { if (Empty(Q)) return 0; else { X = Q.E[Q.front]; if (Q.front == Q.rear) Initialize(Q); else Q.front = Q.front + 1; return 1; } } Hàm DeleteQ thực hiện lấy ra một phần tử ở đầu hàng, hàm trả về 1 nếu lấy ra thành công, ngược lại hàm trả về 0 ỨNG DỤNG Viết chương trình: Nhập... lấy ra một phần tử ở đầu hàng, hàm trả về 1 nếu lấy ra thành công, ngược lại hàm trả về 0 ỨNG DỤNG Viết chương trình: Nhập một chuỗi ký tự, sử dụng hàng đợi, việc nhập kết thúc khi gõ Enter In chuỗi ra màn hình Đếm các nguyên âm trong chuỗi