Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 3: Tổ chức ngăn xếp (Stack) & Hàng đợi (Queue) trên mảng một chiều cung cấp cho người học các khái niệm Ngăn xếp (Stack) và Hàng đợi (Queue), các thao tác trên Ngăn xếp và Hàng đợi, minh họa các ứng dụng. Mời các bạn cùng tham khảo.
Chương Tổ chức ngăn xếp (Stack) & Hàng đợi (Queue) mảng chiều Trần Minh Thái Email: minhthai@huflit.edu.vn Website: www.minhthai.edu.vn Nội dung Trình bày khái niệm Ngăn xếp (Stack) Hàng đợi (Queue) Các thao tác Ngăn xếp Hàng đợi Minh họa ứng dụng Ngăn xếp Ngăn xếp gì? Cách khai báo cấu trúc ngăn xếp dùng mảng chiều? Các ứng dụng Cài đặt Ví dụ Ngăn xếp Thành phần lấy đầu tiên? Khái niệm Stack Gồm nhiều phần tử lưu trữ theo thứ tự Hoạt động theo chế “Vào sau – Ra trước” (LIFO – Last In, First Out) Đỉnh ngăn xếp Thao tác Stack InitStack: khởi tạo Stack rỗng IsEmpty: kiểm tra Stack rỗng? Push Pop IsFull: kiểm tra Stack đầy? Push: thêm phần tử vào Stack Pop: lấy phần tử khỏi Stack PUSH Thao tác Push vào Stack Top Thao tác Pop khỏi stack Top POP Stack – Sử dụng mảng Top C B A Stack B C Top A 9 Ngăn xếp – Sử dụng mảng A B Top A C Top B A D Top C B A E Top D C B A Top D C B A Top 10 Queue số nguyên – Sử dụng mảng Khi thêm nhiều phần tử xảy tượng “tràn giả” Qarray 37 22 15 QMax = QNumItems = QFront = QRear = Giải pháp? Nối dài mảng (mảng động) hay sử dụng mảng vô lớn? 29 Queue số nguyên – Sử dụng mảng Xử lý mảng danh sách liên kết vòng Qarray QMax = QNumItems = QFront = QRear = 6 37 22 15 30 Queue số nguyên – Sử dụng mảng VD: Cho queue sau Chỉ số mảng QArray QMax QNumItems QFront QRear 11 19 21 81 5 Queue số nguyên – Sử dụng mảng Thêm giá trị 123 vào hàng đợi Chỉ số mảng QArray QMax QNumItems QFront QRear 11 19 21 81 123 6 Queue số nguyên – Sử dụng mảng Lấy phần tử khỏi hàng đợi Chỉ số mảng QArray QMax QNumItems QFront QRear 11 19 21 81 123 Queue số nguyên – Sử dụng mảng Thêm giá trị 456 vào hàng đợi Chỉ số mảng QArray QMax QNumItems QFront QRear 456 11 19 21 81 123 Queue số nguyên – Sử dụng mảng bool InitQueue(QUEUE &q, int MaxItem) { q.QArray = new int[MaxItem]; if (q.QArray == NULL) return false; q.QMax = MaxItem; q.QNumItems = 0; q.QFront = q.QRear = -1; return true; } 35 Queue số nguyên – Sử dụng mảng bool IsEmpty(QUEUE q) { if (q.QNumItems == 0) return true; return false; } 36 Queue số nguyên – Sử dụng mảng bool IsFull(QUEUE q) { if (q.QMax == q.QNumItems) return true; return false; } 37 Queue số nguyên – Sử dụng mảng bool EnQueue(QUEUE &q, int newitem) { if (IsFull(q)) return false; q.QRear++; if (q.QRear==q.QMax) q.QRear = 0; q.QArray[q.QRear] = newitem; if (q.QNumItems==0) q.QFront = 0; q.QNumItems++; return true; } 38 Queue số nguyên – Sử dụng mảng bool DeQueue(QUEUE &q, int &itemout) { if (IsEmpty(q)) return false; itemout = q.QArray[q.QFront]; q.QFront++; q.QNumItems ; if (q.QFront==q.QMax) q.QFront = 0; if (q.QNumItems==0) q.QFront = q.QRear = -1; return true; } 39 Queue số nguyên – Sử dụng mảng bool QueueFront(const QUEUE &q, int &itemout) { if (IsEmpty(q)) return false; itemout = q.QArray[q.QFront]; return true; } 40 Queue số nguyên – Sử dụng mảng bool QueueRear(const QUEUE &q, int &itemout) { if (IsEmpty(q)) return false; itemout = q.QArray[q.QRear]; return true; } 41 Bài tập áp dụng Viết chương trình nhập/ xuất hàng đợi số nguyên (dùng mảng chiều) Cho biết hàng đợi có số lẻ 42 Queue – Ví dụ ứng dụng Quản lý việc thực tác vụ (task) môi trường xử lý song song Hàng đợi in ấn tài liệu Vùng nhớ đệm (buffer) dùng cho bàn phím Quản lý thang máy 43 ... phải trục vào stack Stack rỗng Stop (3, 4) (0, 4) (0, 1) t 35 57 7 53 i j 21 Queue Phòng vé 22 Queue – Định nghĩa Hàng đợi cấu trúc: Gồm nhiều phần tử có thứ tự Hoạt động theo chế “Vào trước,... (q.QFront==q.QMax) q.QFront = 0; if (q.QNumItems== 0) q.QFront = q.QRear = -1 ; return true; } 39 Queue số nguyên – Sử dụng mảng bool QueueFront(const QUEUE &q, int &itemout) { if (IsEmpty(q )) return false;... s.StkTop ; return true; } 16 Bài tập Viết hàm nhập xuất Stack số nguyên Khai báo cấu trúc viết hàm tạo Stack từ chuỗi ký tự str (mỗi phần tử Stack ký t? ?) Khai báo cấu trúc viết hàm tạo Stack từ