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

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

58 759 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

Thông tin cơ bản

Định dạng
Số trang 58
Dung lượng 538,61 KB

Nội dung

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

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN