Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 74 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
74
Dung lượng
1,22 MB
Nội dung
CHƯƠNG KIỂU NGĂN XẾP, HÀNG ĐỢI, ĐỆ QUY GV Th.S Thiều Quang Trung Trường Cao đẳng Kinh tế Đối ngoại Nội dung • Khái niệm ngăn xếp • Phương pháp xây dựng stack • Các thao tác stack • Kiểu queue - hàng đợi • Các thao tác queue • Đệ qui tốn đệ qui GV Thiều Quang Trung Ngăn xếp - Định nghĩa • Stack cấu trúc: – 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 GV Thiều Quang Trung Thao tác Stack • • • • • InitStack: khởi tạo Stack rỗng IsEmpty: kiểm tra Stack rỗng? Push IsFull: kiểm tra Stack đầy? Push: thêm phần tử vào Stack Pop: lấy phần tử khỏi Stack GV Thiều Quang Trung Pop PUSH Thao tác thêm - Push vào Stack Top GV Thiều Quang Trung Thao tác lấy - Pop khỏi stack Top POP GV Thiều Quang Trung Ví dụ thêm xóa phần tử stack Cần nhập số vào Nhập Ban đầu Lấy => Lấy => 7 5 Nhập 5 Lấy => 5 GV Thiều Quang Trung Nhập Nhập 7 5 Lấy => Stack rỗng Ngừng 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ố lượng ▪ Không bị cố định số phần tử cố định 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 GV Thiều Quang Trung Stack – Sử dụng mảng Top Stack GV Thiều Quang Trung 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; GV Thiều Quang Trung 10 Tính giai thừa • Định nghĩa không đệ qui: – n! = n * (n-1) * … * • Định nghĩa đệ qui: n! = n * (n-1)! n=0 n>0 • Mã C++: int factorial(int n) { if (n==0) return 1; else return (n * factorial(n - 1)); } GV Thiều Quang Trung 60 Thi hành hàm tính giai thừa factorial (3) n=3 factorial (2) … n=2 3*factorial(2) … factorial (1) n=1 2*factorial(1) … factorial (0) 1*factorial(0) n=0 … return 1; 1 GV Thiều Quang Trung 61 Trạng thái hệ thống thi hành hàm tính giai thừa Stack hệ thống factorial(0) factorial(1) factorial(1) factorial(1) factorial(2) factorial(2) factorial(2) factorial(2) factorial(2) factorial(3) factorial(3) factorial(3) factorial(3) factorial(3) factorial(3) factorial(3) t Thời gian hệ thống Gọi hàm Gọi hàm factorial(3) factorial(2) Trả từ Trả từ Trả từ Gọi hàm Gọi hàm hàm hàm hàm factorial(1) factorial(0) factorial(0) factorial(1) factorial(2) Trả từ hàm factorial(3) t GV Thiều Quang Trung 62 Bài tốn Tháp Hà nội • Luật: – Di chuyển lần đĩa – Không đặt đĩa lớn lên đĩa nhỏ GV Thiều Quang Trung 63 Bài toán Tháp Hà nội – Thiết kế hàm • Hàm đệ qui: – Chuyển (count-1) đĩa đỉnh cột start sang cột temp – Chuyển đĩa (cuối cùng) cột start sang cột finish – Chuyển count-1 đĩa từ cột temp sang cột finish magic GV Thiều Quang Trung 64 Bài toán Tháp Hà nội – Mã C++ void move(int count, int start, int finish, int temp) { if (count > 0) { move(count − 1, start, temp, finish); cout