STACK & QUEUE NGĂN XẾP & HÀNG ĐỢI doc

58 1.7K 10
STACK & QUEUE NGĂN XẾP & HÀNG ĐỢI doc

Đ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

STACK & QUEUE NGĂN XẾP & HÀNG ĐỢI Nội dung • Trình bày khái niệm Stack và Queue • Minh họa các ứng dụng • Các phương pháp xây dựng StackQueue dựa trên những cấu trúc dữ liệu đã biết •Stack – Ví dụ – Định nghĩa – Các thao tác cơ bản – Xây dựng Stack •Queue – Ví dụ – Định nghĩa – Các thao tác cơ bản – Xây dựng Queue Ngăn xếp (Stack) Chồng khay cà phê Chồng tiền xu Chồng sách Chồng áo sơ mi Các ví dụ về Ngăn xếp Ngăn xếp - Định nghĩa • Stack là 1 cấu trúc: • gồm nhiều phần tử có thứ tự • hoạt động theo cơ chế “Vào sau – Ra trước” (LIFO – Last In, First Out) Đỉnh ngăn xếp Ngăn xếp - Định nghĩa • Các thao tác cơ bản trên 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 1 phần tử vào đỉnh Stack, có thể làm Stack đầy • Pop: lấy ra 1 phần tử từ đỉnh Stack, có thể làm Stack rỗng • StackTop: kiểm tra phần tử đầu Stack Push Pop Ngăn xếp • Minh họa thao tác Push Data Top Ngăn xếp • Minh họa thao tác Pop Data Top Ngăn xếp • Minh họa thao tác StackTop  Ngăn xếp không thay đổi Data Top ? ? Ngăn xếp • Có hai cách để xây dựng ngăn xếp • Sử dụng mảng 1 chiều • Sử dụng danh sách liên kết đơn Mảng 1 chiều Danh sách liên kết đơn - Viết chương trình dễ dàng, nhanh chóng - Bị hạn chế do số lượng phần tử cố định - Tốn chi phí tái cấp phát và sao chép vùng nhớ nếu sử dụng mảng động Phức tạp khi triển khai chương trình Không bị cố định về số phần tử, phụ thuộc vào bộ nhớ Ngăn xếp – Sử dụng mảng 9 3 6 9 3 6 0 1 2 3 4 5 6 7 8 9 Xây dựng ngăn xếp bằng mảng 1 chiều Ngăn xếp có 3 phần tử StkTop Đỉnh ngăn xếp Stack Stack Top Top [...]... bản trên hàng đợi: • InitQueue: khởi tạo hàng đợi rỗng • IsEmpty: kiểm tra hàng đợi rỗng ? • IsFull: kiểm tra hàng đợi đầy ? • EnQueue: thêm 1 phần tử vào cuối hàng đợi, có thể làm hàng đợi đầy • DeQueue: lấy ra 1 phần tử từ đầu Queue, có thể làm Queue rỗng • QueueFront, QueueRear: kiểm tra phần tử đầu và phần tử cuối Queue Hàng đợi • Minh họa thao tác EnQueue • Minh họa thao tác DeQueue Hàng đợi • Có... phần tử nào trong Stack return 1; // khởi tạo thành công } Ngăn xếp – Sử dụng mảng • Thao tác “Kiểm tra Stack rỗng” int IsEmpty(const STACK &s) { if (s.StkTop==-1) return 1; // Stack rỗng return 0; // Stack không rỗng } Ngăn xếp – Sử dụng mảng • Thao tác “Kiểm tra Stack đầy” int IsFull(const STACK &s) { if (s.StkTop==s.StkMax-1) return 1; // Stack đầy return 0; // Stack chưa đầy } Ngăn xếp – Sử dụng mảng... báo cấu trúc stack struct STACK { int StkCount; NODE *StkTop; }; Ngăn xếp – Sử dụng DSLK • VD: Thực hiện một số thao tác trên stack StkCnt STACK s; StkTop N InitStack(s); Push(s, 7); Push(s, 4); Pop(s, x); // x = ? 4 7 Data Link Ngăn xếp – Sử dụng DSLK • Thao tác “Khởi tạo stack rỗng”: void InitStack (STACK& s) { s.StkTop = NULL; s.StkCount = 0; } Ngăn xếp – Sử dụng DSLK • Thao tác “Kiểm tra stack rỗng”:... rỗng”: int IsEmpty(const STACK& s) { if (s.StkTop == NULL) return 1; return 0; } // stack rỗng // stack không rỗng Ngăn xếp – Sử dụng DSLK • Thao tác “Kiểm tra stack đầy”: int IsFull (const STACK s) { // thử tạo mới một phần tử STACK_ NODE* temp = new STACK_ NODE; // nếu không tạo được  stack đầy if (temp == NULL) return 1; // stack đầy delete temp; return 0; // stack chưa đầy } Ngăn xếp – Sử dụng DSLK •... từ stack • Chọn phần tử trục trên phân hoạch này • Điều chỉnh phân hoạch tương ứng với trục • Push 2 phân hoạch bên trái và phải trục vào stack Stack rỗng Stop t 1 4 5 7 7 5 3 0 (3,4) (0,1) (0,4) 3 5 1 2 3 4 i j Hàng đợi (Queue) Phòng vé Hàng đợi – Định nghĩa • Hàng đợi là một cấu trúc: • Gồm nhiều phần tử có thứ tự • Hoạt động theo cơ chế “Vào trước, ra trước” (FIFO - First In First Out) Hàng đợi. . .Ngăn xếp – Sử dụng mảng • // Giả sử Stack chứa các phần tử kiểu nguyên • // (int) - Khai báo cấu trúc Stack struct STACK { int* StkArray; // mảng chứa các phần tử int StkMax; // số phần tử tối đa int StkTop; // vị trí đỉnh Stack }; Ngăn xếp – Sử dụng mảng • Thao tác “Khởi tạo Stack rỗng” int InitStack (STACK& s, int MaxItems) { s.StkArray = new int[MaxItems];... s.StkArray[s.StkTop]; s.StkTop ; return 1; // lấy ra thành công } Ngăn xếp – Sử dụng mảng • Thao tác “StackTop”: kiểm tra 1 phần tử ở đỉnh Stack, không làm thay đổi Stack int StackTop(const STACK s, int& outitem) { if (IsEmpty(s)) return 0; // Stack rỗng, không lấy ra được outitem = s.StkArray[s.StkTop]; return 1; // lấy ra thành công } Ngăn xếp – Ví dụ ứng dụng • Kiểm tra sự tương ứng của các cặp ngoặc... stack, không làm thay đổi stack int StackTop (STACK &s, int& outitem) { if (IsEmpty(s)) return 0; // Stack rỗng, không lấy ra được outitem = s.StkTop->Data; return 1; // Lấy ra thành công } Ngăn xếp – Ứng dụng • Stack có nhiều ứng dụng: • Lưu vết trong thuật toán “back-tracking” (theo dõi dấu vết) • Tính giá trị biểu thức toán học (thuật toán Balan ngược) • Khử đệ quy • … Ngăn xếp – Quick Sort • Để khử... B ) / C) ? nếiK nĂ áC Ngăn xếp – Sử dụng DSLK StkCnt StkTop N 7 9  7 Data Link 9 Data Link  4 4 Data Link Ngăn xếp – Sử dụng DSLK • Cấu tạo đầu stack StkCnt StkTop stack StkCnt StkTop end stack N • Cấu tạo một phần tử trong stacknode Data Link Data Link end node Ngăn xếp – Sử dụng DSLK // Khai báo cấu trúc một phần tử trong stack struct NODE { int... mảng • Thao tác “Push”: thêm một phần tử vào đỉnh Stack int Push (STACK& s, int newitem) { if (IsFull(s)) return 0; // stack đầy, không thể thêm s.StkTop++; s.StkArray[s.StkTop] = newitem; return 1; // thêm thành công } Ngăn xếp – Sử dụng mảng • Thao tác “Pop”: lấy ra 1 phần tử từ đỉnh Stack int Pop (STACK& s, int& outitem) { if (IsEmpty(s)) return 0; // Stack rỗng, không lấy ra được outitem = s.StkArray[s.StkTop]; . STACK & QUEUE NGĂN XẾP & HÀNG ĐỢI Nội dung • Trình bày khái niệm Stack và Queue • Minh họa các ứng dụng • Các phương pháp xây dựng Stack và Queue. trong stack N StkCnt StkTop Data Link stack StkCnt <integer> StkTop <node pointer> end stack node Data <datatype> Link <node pointer> end

Ngày đăng: 22/03/2014, 18:20

Từ khóa liên quan

Mục lục

  • Stack & Queue Ngăn xếp & Hàng đợi

  • Nội dung

  • Ngăn xếp (Stack)

  • Ngăn xếp - Định nghĩa

  • Slide 5

  • Ngăn xếp

  • Slide 7

  • Slide 8

  • Slide 9

  • Ngăn xếp – Sử dụng mảng

  • Slide 11

  • Slide 12

  • Slide 13

  • Slide 14

  • Slide 15

  • Slide 16

  • Slide 17

  • Ngăn xếp – Ví dụ ứng dụng

  • Ngăn xếp – Sử dụng DSLK

  • Slide 20

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

Tài liệu liên quan