Bài giảng cấu trúc dữ liệu và giải thuật chương 4 stack queue

58 759 0
Bài giảng cấu trúc dữ liệu và giải thuật chương 4 stack  queue

Đ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 3.2. Ngăn xếp & Hàng đợi Trần Minh Thái Email: minhthai@itc.edu.vn Website: www.minhthai.edu.vn 1 Nội dung  Trình bày khái niệm Ngăn xếp (Stack) và Hàng đợi (Queue)  Minh họa các ứng dụng  Các phương pháp xây dựng Stack và Queue 2 Khái niệm Stack 3 Khái niệm Stack  Gồm nhiều phần tử  Hoạt động theo cơ chế “Vào sau – Ra trước” (LIFO – Last In, First Out) Đỉnh ngăn xếp 4 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 Stack  Pop: lấy ra 1 phần tử khỏi Stack Push Pop 5 Thao tác Push vào Stack 6 Top PUSH Thao tác Pop khỏi stack 7 Top P O P Cách xây dựng Stack 8 Mảng 1 chiều Danh sách liên kết  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ớ Stack – Sử dụng mảng 9 3 6 9 3 6 0 1 2 3 4 5 6 7 8 9 Stack Top 9 Stack số nguyên – Sử dụng mảng struct ttStack { 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 }; typedef struct ttStack STACK; 10 [...]... phân hoạch 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 t Stop 1 3 5 4 5 7 7 5 3 0 1 2 3 4 (3 ,4) (0 ,4) (0,1) i j 29 Queue Phòng vé 30 Queue – Đị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) 31 Queue – Định... thao tác trên stack STACK s; InitStack(s); StkCnt StkTop N Push(s, 7); 4 7 Push(s, 4) ; Data Pop(s, x); // x = ? 21 Link Stack số nguyên – Sử dụng DSLK void InitStack (STACK &s) { s.StkTop = NULL; s.StkCount = 0; } 22 Stack số nguyên – Sử dụng DSLK bool IsEmpty(const STACK &s) { if (s.StkTop == NULL) return true; return false; } 23 Stack số nguyên – Sử dụng DSLK bool IsFull (const STACK s) { STACK_ NODE*... 4 4 Data 18 Link Stack – Sử dụng DSLK Cấu tạo đầu stack stack StkCnt StkCnt StkTop StkTop end stack N Cấu tạo một phần tử node Data Link end node Data Link 19 Stack số nguyên – Sử dụng DSLK typedef struct tagSTACK_NODE { int Data; tagSTACK_NODE *pNext; } STACK_ NODE; typedef struct STACK { int StkCount; STACK_ NODE *StkTop; }; 20 Stack – Sử dụng DSLK... một stack để lưu lại các partition (phân hoạch) cần tiến hành sắp xếp Ý tưởng: Push phân hoạch đầu tiên (0, n-1) vào stack Trong khi stack chưa rỗng  Pop một phân hoạch 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 28 Stack – Quick Sort  Push phân hoạch đầu tiên (0, n-1) vào stack  Trong khi stack. .. 13 Stack số nguyên – Sử dụng mảng bool Push (STACK &s, int newitem) { if (IsFull(s)) return false; s.StkTop++; s.StkArray[s.StkTop] = newitem; return true; } 14 Stack số nguyên – Sử dụng mảng bool Pop (STACK &s, int &outitem) { if (IsEmpty(s)) return false; outitem = s.StkArray[s.StkTop]; s.StkTop ; return true; } 15 Bài tập Viết hàm nhập và xuất Stack số nguyên Khai báo cấu trúc và viết hàm tạo Stack. .. 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 32 Queue Minh họa thao tác EnQueue Minh họa thao tác DeQueue 33 Cách xây dựng Queue Sử dụng mảng một chiều Sử dụng danh sách liên kết đơn 34 Queue – Sử dụng... phần tử Stack là ký tự) Khai báo cấu trúc và viết hàm tạo Stack từ chuỗi ký tự str (mỗi phần tử Stack là một từ - từ cách nhau bởi khoảng trắng) 16 Stack – Ví dụ ứng dụng Kiểm tra sự tương ứng của các cặp ngoặc đơn trong một biểu thức ( ( A + B ) / C Đảo ngược một chuỗi ký tự ?  Cá Ăn Kiến ( A + B ) / C) nếiK nĂ áC ? 17 Stack – Sử dụng DSLK StkCnt StkTop N 7 7 Data Link 9  9 Data Link  4 4 Data... STACK_ NODE* temp = new STACK_ NODE; if (temp == NULL) return true; delete temp; return false; } 24 Stack số nguyên – Sử dụng DSLK bool Push (STACK &s, int newitem) { if (IsFull(s)) return false; STACK_ NODE *pNew = new STACK_ NODE; StkCnt StkTop N pNew->Data = newitem; pNew->pNext = s.StkTop; 4 7 s.StkTop = pNew; Data s.StkCount++; return true; } 25 Link Stack số nguyên – Sử dụng DSLK bool Pop (STACK &s, int &outitem)... (IsEmpty(s)) return false; STACK_ NODE *temp = s.StkTop; StkCnt StkTop temp N outitem = s.StkTop->Data; 4 s.StkTop = s.StkTop->pNext; Data delete temp; Link s.StkCount ; return true; 7 } Data outitem = 4 26 Link Stack – Ứ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 … 27 Stack – Quick Sort.. .Stack số nguyên – Sử dụng mảng bool InitStack (STACK& s, int MaxItems) { s.StkArray = new int[MaxItems]; if (s.StkArray == NULL) return false; s.StkMax = MaxItems; s.StkTop = -1; return true; } 11 Stack số nguyên – Sử dụng mảng bool IsEmpty(const STACK &s) { if (s.StkTop==-1) return true; return false; } 12 Stack số nguyên – Sử dụng mảng bool IsFull(const STACK &s) { if (s.StkTop==s.StkMax-1) . 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 Stack  Pop: lấy ra 1 phần tử khỏi Stack Push Pop 5 Thao tác Push vào Stack 6 Top PUSH Thao. dựng Stack và Queue 2 Khái niệm Stack 3 Khái niệm Stack  Gồm nhiều phần tử  Hoạt động theo cơ chế “Vào sau – Ra trước” (LIFO – Last In, First Out) Đỉnh ngăn xếp 4 Thao tác cơ bản trên Stack  InitStack:. nguyên  Khai báo cấu trúc và viết hàm tạo Stack từ chuỗi ký tự str (mỗi phần tử Stack là ký tự)  Khai báo cấu trúc và viết hàm tạo Stack từ chuỗi ký tự str (mỗi phần tử Stack là một từ - từ cách

Ngày đăng: 04/09/2015, 15:14

Từ khóa liên quan

Mục lục

  • Slide 1

  • Nội dung

  • Khái niệm Stack

  • Khái niệm Stack

  • Thao tác cơ bản trên Stack

  • Thao tác Push vào Stack

  • Thao tác Pop khỏi stack

  • Cách xây dựng Stack

  • Stack – Sử dụng mảng

  • Stack số nguyên – Sử dụng mảng

  • Stack số nguyên – Sử dụng mảng

  • Stack số nguyên – Sử dụng mảng

  • Stack số nguyên – Sử dụng mảng

  • Stack số nguyên – Sử dụng mảng

  • Stack số nguyên – Sử dụng mảng

  • Bài tập

  • Stack – Ví dụ ứng dụng

  • Stack – Sử dụng DSLK

  • Stack – Sử dụng DSLK

  • Stack số nguyên – Sử dụng DSLK

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

Tài liệu liên quan