C++ Stacks

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.