1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Bài giảng cấu trúc dữ liệu chương 4 ths võ quang hoàng khang

58 2 0

Đ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

Chương Ngăn xếp & Hàng đợi Võ Quang Hoàng Khang Email: vqhkhang@gmail.com Nội dung Trình bày khái niệm Ngăn xếp (Stack) Hàng đợi (Queue) Minh họa ứng dụng Các phương pháp xây dựng Stack Queue Khái niệm Stack Khái niệm Stack Gồm nhiều phần 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 Cách xây dựng Stack Mảng chiều Danh sách liên kết  Viết chương trình dễ  Phức tạp triển khai dàng, nhanh chóng chương trình  Bị hạn chế số  Không bị cố định lượng phần tử cố định số phần tử, phụ thuộc vào nhớ  Tốn chi phí tái cấp phát chép vùng nhớ sử dụng mảng động Stack – Sử dụng mảng Top Stack 6 9 Stack số nguyên – Sử dụng mảng struct ttStack { int* StkArray; // mảng chứa phần tử int StkMax; // số phần tử tối đa int StkTop; // vị trí đỉnh Stack }; typedef struct ttStack STACK; 10 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; } 44 Queue số nguyên – Sử dụng mảng bool IsEmpty(QUEUE q) { if (q.QNumItems == 0) return true; return false; } 45 Queue số nguyên – Sử dụng mảng bool IsFull(QUEUE q) { if (q.QMax == q.QNumItems) return true; return false; } 46 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; } 47 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; } 48 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; } 49 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; } 50 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 51 Queue – Sử dụng DSLK typedef struct tagNODE { int data; tagNODE* pNext; } NODE, *PNODE; typedef struct tagQUEUE { int NumItems; PNODE pFront, pRear; } QUEUE; 52 Queue – Sử dụng DSLK Các thao tác bool InitQueue(QUEUE &q); bool IsEmpty(const QUEUE &q); bool IsFull(const QUEUE &q); bool EnQueue(QUEUE &q, int newitem); bool DeQueue(QUEUE &q, int& itemout); 53 Queue – Sử dụng DSLK bool InitQueue(QUEUE &q) { q.NumItems = 0; q.pFront = q.pRear = NULL; return true; } 54 Queue – Sử dụng DSLK bool IsEmpty(const QUEUE& q) { return (q.NumItems==0); } 55 Queue – Sử dụng DSLK bool IsFull(const QUEUE &q) { PNODE tmp = new NODE; if (tmp==NULL) return true; delete tmp; return false; } 56 Queue – Sử dụng DSLK bool EnQueue(QUEUE &q, int newitem) { if (IsFull(q)) return false; PNODE p = new NODE; p->data = newitem; p->pNext = NULL; if (q.pFront==NULL && q.pRear==NULL) q.pFront = q.pRear = p; else { q.pRear->pNext = p; q.pRear = p; } q.NumItems++; return true; } 57 Queue – Sử dụng DSLK bool DeQueue(QUEUE &q, int &itemout) { if (IsEmpty(q)) return false; PNODE p = q.pFront; q.pFront = p->pNext; itemout = p->data; q.NumItems ; delete p; if (q.NumItems==0) InitQueue(q); return true; } 58 ... 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ừ chuỗi ký tự str (mỗi phần... phân hoạch bên trái phải trục vào stack Stack rỗng Stop (3 ,4) (0 ,4) (0,1) t 5 i j 29 Queue Phòng vé 30 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... StkTop N 7  Data Link Data Link  4 Data Link 18 Stack – Sử dụng DSLK ? ?Cấu tạo đầu stack StkCnt StkTop N stack StkCnt StkTop end stack node ? ?Cấu tạo phần tử Data Data Link

Ngày đăng: 07/12/2022, 00:07

Xem thêm: