STACK & QUEUE NGĂN XẾP & HÀNG ĐỢI
lượt xem 19
download
• 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 dựa trên nh ững cấu trúc dữ liệu đã
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: STACK & QUEUE NGĂN XẾP & HÀNG ĐỢI
- 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 dựa trên nh ững cấu trúc dữ liệu đã biết •Stack •Queue –Ví dụ –Ví dụ –Định nghĩa –Định nghĩa –Các thao tác cơ bản –Các thao tác cơ bản –Xây dựng Stack –Xây dựng Queue
- Ngăn xếp (Stack) Chồng khay Chồng tiền Chồng sách Chồng áo sơ cà phê xu 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 Push Pop • 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
- 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ễ Phức tạp khi triển khai chương trình dàng, nhanh chóng - Bị hạn chế do số lượng Không bị cố định về số phần tử cố định phần tử, phụ thuộc vào bộ 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
- Ngăn xếp – Sử dụng mảng Xây dựng ngăn xếp bằng mảng 1 chiều Top 6 3 StkTop 9 Đỉnh ngăn xếp Stack 9 3 6 0 1 2 3 4 5 6 7 8 9 Ngăn xếp có 3 phần tử
- 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]; if (s.StkArray == NULL) return 0; // Không cấp phát được bộ nhớ s.StkMax = MaxItems; s.StkTop = -1; // chưa 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 • 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]; 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 đơn trong một biểu thức ? ? •((A+B)/C ( A + B ) / C) • Đảo ngược một chuỗi ký tự • Cá Ăn Kiến nếiK nĂ áC
- Ngăn xếp – Sử dụng DSLK StkCnt StkTop N 7 7 Data Link 9 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 N StkTop end stack • Cấu tạo một phần tử trong stack node Data Link end node Data Link
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Chương 4: Ngăn xếp, hàng đợi và danh sách móc nối (stack, queue, link list)
62 p | 392 | 82
-
Khoa học máy tính - Hàng đợi và ngăn xếp
9 p | 206 | 41
-
NGĂN XẾP & HÀNG ĐỢI-(Stack&Queue)
9 p | 86 | 23
-
Bài giảng Cấu trúc dữ liệu: Chương 7 - Nguyễn Xuân Vinh
61 p | 75 | 10
-
Bài giảng Cấu trúc dữ liệu giải thuật: Stack and Queue
30 p | 74 | 9
-
Bài giảng Cấu trúc dữ liệu - Chương 5: Ngăn xếp - Hàng đợi
92 p | 73 | 8
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 8 - Trường ĐH Văn Lang
38 p | 23 | 7
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Ngăn xếp và hàng đợi - TS. Trần Ngọc Việt
17 p | 26 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 4 - Đỗ Bích Diệp
29 p | 95 | 5
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 3 - Trần Minh Thái (Trường Đại học Hồng Bàng )
43 p | 69 | 4
-
Bài giảng Cấu trúc dữ liệu: Chương 5 - Trịnh Xuân
7 p | 45 | 3
-
Bài giảng Cấu trúc dữ liệu: Chương 5 - ThS. Thiều Quang Trung (2018)
74 p | 59 | 3
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 5 - Th.S Thiều Quang Trung
74 p | 58 | 3
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 3 – Trần Minh Thái (2017)
65 p | 56 | 3
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 3 - Trần Minh Thái (2016)
64 p | 45 | 3
-
Bài giảng Cấu trúc dữ liệu: Chương 4 - ThS. Võ Quang Hoàng Khang
58 p | 50 | 3
-
Giáo trình Kỹ thuật lập trình: Phần 2
240 p | 17 | 3
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn