Khám Phá Ngăn Xếp (Stacks) Trong Lập Trình C++
Ngăn xếp (stack) là một cấu trúc dữ liệu rất quan trọng trong lập trình, và nó được định nghĩa như một tập hợp các phần tử được sắp xếp theo nguyên tắc LIFO (Last In, First Out), nghĩa là phần tử vừa được thêm vào sẽ là phần tử đầu tiên được lấy ra. Trong C++, ngăn xếp có thể được thực hiện thông qua các lớp trong thư viện chuẩn hoặc tự xây dựng bằng cách sử dụng các cấu trúc dữ liệu như mảng hoặc danh sách liên kết.
Định Nghĩa Ngăn Xếp
Ngăn xếp là một cấu trúc dữ liệu nơi mà các phép toán chính bao gồm:
- Push: Thêm một phần tử vào trên cùng của ngăn xếp.
- Pop: Loại bỏ phần tử trên cùng khỏi ngăn xếp.
- Top: Trả về phần tử trên cùng mà không loại bỏ nó.
- IsEmpty: Kiểm tra xem ngăn xếp có rỗng hay không.
Cú Pháp Cơ Bản Của Ngăn Xếp Trong C++
C++ cung cấp một thư viện chuẩn #include
để làm việc với ngăn xếp. Dưới đây là cú pháp cơ bản để sử dụng ngăn xếp trong C++:
#include#include int main() { // Khai báo một ngăn xếp kiểu int std::stack myStack; // Thêm phần tử vào ngăn xếp myStack.push(10); myStack.push(20); myStack.push(30); // Lấy phần tử trên cùng std::cout << "Phan tu tren cung: " << myStack.top() << std::endl; // Xóa phần tử trên cùng myStack.pop(); std::cout << "Phan tu tren cung sau khi pop: " << myStack.top() << std::endl; // Kiểm tra ngăn xếp có rỗng không if (myStack.empty()) { std::cout << "Ngăn xếp roi!" << std::endl; } else { std::cout << "Ngăn xếp khong roi!" << std::endl; } return 0; }
Ví Dụ Thực Tế Về Ngăn Xếp
Bây giờ, hãy xem xét một ví dụ thực tế để hiểu rõ hơn về cách hoạt động của ngăn xếp. Giả sử chúng ta muốn đảo ngược một chuỗi các ký tự bằng cách sử dụng ngăn xếp:
#include#include #include void reverseString(std::string& str) { std::stack charStack; // Đưa tất cả ký tự vào ngăn xếp for (char c : str) { charStack.push(c); } // Lấy ký tự từ ngăn xếp và đưa trở lại chuỗi for (int i = 0; i < str.length(); ++i) { str[i] = charStack.top(); charStack.pop(); } } int main() { std::string input = "Hello, World!"; reverseString(input); std::cout << "Chuoi da dao nguoc: " << input << std::endl; return 0; }
Kết Luận
Ngăn xếp là một cấu trúc dữ liệu đơn giản nhưng mạnh mẽ, có nhiều ứng dụng trong lập trình như quản lý các hàm gọi, phân tích biểu thức và nhiều hơn nữa. Bằng cách sử dụng ngăn xếp trong C++, bạn có thể tối ưu hóa mã của mình và dễ dàng quản lý dữ liệu theo cấu trúc LIFO.