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 trình bày 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, tổ chức dữ liệu dùng mảng 1 chiều, minh họa các ứng dụng
Chương Tổ chức ngăn xếp (Stack) & Hàng đợi (Queue) mảng chiều (3t) 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 Tổ chức liệu dùng mảng chiều 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? 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 Pop 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 E D D D C C C B B B B A A A A C B A Top A Top Top Top Top 10 Top Queue số nguyên Khi thêm nhiều phần tử xảy tượng “tràn giả” Qarray 37 22 15 QMax = Nối dài mảng (mảng động) hay sử dụng mảng vô lớn? Giải pháp?QNumItems =6 QFront = QRear = 50 Queue số nguyên Xử lý mảng danh sách vòng Qarray 37 22 15 QMax = QNumItems = QFront = QRear = 51 Queue số nguyên VD: Cho queue sau Chỉ số mảng 11 19 21 81 QArray QMax QNumItems QFront QRear Queue số nguyên Thêm giá trị 123 vào hàng đợi Chỉ số mảng 11 19 21 81 123 QArray QMax QNumItems QFront QRear Queue số nguyên Lấy phần tử khỏi hàng đợi Chỉ số mảng 11 19 21 81 123 QArray QMax QNumItems QFront QRear Queue số nguyên Thêm giá trị 456 vào hàng đợi Chỉ số mảng QArray QMax QNumItems QFront QRear 0 456 11 19 21 81 123 Queue số nguyên – Khởi tạo public bool InitQueue (int MaxItem) { QArray = new int[MaxItem]; if (QArray == NULL) return false; QMax = MaxItem; QNumItems = 0; QFront = QRear = -1; return true; } 56 Queue số nguyên – Kiểm tra rỗng public bool IsEmpty() { if (QNumItems == 0) return true; return false; } 57 Queue số nguyên – Kiểm tra đầy public bool IsFull() { if (QMax == QNumItems) return true; return false; } 58 Queue số nguyên – Thêm phần tử vào queue public bool EnQueue(int newitem) { if (IsFull()) return false; QRear++; if (QRear==QMax) QRear = 0; QArray[QRear] = newitem; if (QNumItems==0) QFront = 0; QNumItems++; return true; } 59 Queue số nguyên – Lấy phần tử khỏi queue public int DeQueue() { if (IsEmpty()) return -1; int itemout = QArray[QFront]; QFront++; QNumItems ; if (QFront==QMax) QFront = 0; if (QNumItems==0) QFront = QRear = -1; return true; } 60 Queue số nguyên – Xem giá trị đầu public int QueueFront() { if (IsEmpty()) return -1; return QArray[QFront]; } 61 Queue số nguyên – Xem giá trị cuối public int QueueRear() { if (IsEmpty()) return -1; return QArray[QRear]; } 62 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ẻ 63 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 64 ... 13 Left-to-right left-to-right +- binary add or subtract 12 left-to-right > shift 11 left-to-right > >= <