STL stack cung cấp chức năng của cấu trúc dữ liệu ngăn xếp trong C ++.

Cấu trúc dữ liệu ngăn xếp sau LIFO (Last In First Out) nguyên tắc. Nghĩa là, phần tử được thêm vào cuối cùng sẽ bị loại bỏ trước.

Cấu trúc dữ liệu ngăn xếp

Để tìm hiểu thêm về ngăn xếp, hãy truy cập hướng dẫn của chúng tôi về Stack Data Structure.

Tạo ra Stack

Để tạo một ngăn xếp trong C ++, trước tiên chúng ta cần bao gồm stack tập tin tiêu đề.

#include <stack>

Sau khi nhập tệp này, chúng tôi có thể tạo stack sử dụng cú pháp sau:

stack<type> st;

Nơi đây, type cho biết kiểu dữ liệu lệnh này lệnh này chúng ta muốn lưu trữ trong ngăn xếp. Ví dụ,

// create a stack of integers
 stack<int> integer_stack; 
// create a stack of strings
stack<string> string_stack;

Ví dụ: C ++ STL Stack

#include <iostream>

#include <stack>

using namespace std;

int main {
    // create a stack of strings

stack<string> languages;

    
    // add element to the Stack
    languages.push("C++");
    languages.push("Java");
    languages.push("Python");
    
    // print top element
    cout << languages.top;

    return 0;
}

Output

Python

Trong ví dụ trên, chúng tôi đã tạo stack ngôn ngữ có tên chuỗi .

Ở đây, chúng tôi đã sử dụng push để thêm các phần tử vào ngăn xếp. Sau đó chúng tôi đã sử dụng top để hiển thị phần tử trên cùng.

Chúng tôi sẽ tìm hiểu thêm về pushtop ở phần sau của hướng dẫn.

Phương pháp ngăn xếp

Trong C ++, stack lớp cung cấp các phương thức khác nhau để thực hiện các hoạt động khác nhau trên một ngăn xếp.

Hoạt động Sự mô tả
push thêm một phần tử vào ngăn xếp
pop loại bỏ một phần tử khỏi ngăn xếp
top trả về phần tử ở đầu ngăn xếp
size trả về số phần tử trong ngăn xếp
empty trả lại true nếu ngăn xếp trống

Thêm phần tử vào ngăn xếp

Chúng tôi sử dụng push để thêm một phần tử vào một ngăn xếp. Ví dụ,

#include <iostream>

#include <stack>

using namespace std;

int main {

  // create a stack of strings
  stack<string> colors;

// đẩy các phần tử vào ngăn xếp colors.push(“Red”); colors.push(“Orange”);

  
  cout << "Stack: ";

  // print elements of stack
   while(!colors.empty) {
    cout << colors.top << ", ";
    colors.pop;
  }
 
  return 0;
}

Output

Stack: Orange, Red, 

Trong ví dụ trên, chúng ta đã tạo một chồng các chuỗi được gọi là màu. Sau đó, chúng tôi đã sử dụng push để thêm các phần tử vào ngăn xếp.

colors.push("Red");
colors.push("Orange");

Thay vì in trực tiếp nội dung của ngăn xếp, chúng tôi đã sử dụng while vòng lặp và các phương thức ngăn xếp khác nhau.

while(!colors.empty) {
  cout << colors.top << ", ";
  colors.pop;
}

Để in tất cả các phần tử của ngăn xếp, chúng tôi in top element và sau đó pop(loại bỏ) nó bên trong vòng lặp. Quá trình này tiếp tục lặp đi lặp lại cho đến khi ngăn xếp trống.

Chúng ta sẽ tìm hiểu về pop, topempty trong các phần tới.

Cũng lưu ý rằng chúng tôi đã chèn các phần tử theo thứ tự sau: {“Red”, “Orange”}.

Nhưng khi in các phần tử, chúng tôi nhận được {“Orange”, “Red”}.

Điều này là do ngăn xếp là cấu trúc dữ liệu LIFO, có nghĩa là phần tử được chèn vào cuối cùng sẽ được truy xuất trước.

Lưu ý: Không giống như vectơ hoặc các vùng chứa khác, chúng ta không thể sử dụng một dải for lặp lại để lặp qua một ngăn xếp Điều này là do ngăn xếp STL là Bộ điều hợp vùng chứa STL, cung cấp quyền truy cập hạn chế để làm cho nó hoạt động giống như một cấu trúc dữ liệu ngăn xếp tiêu chuẩn.

Xóa các phần tử khỏi Stack

Chúng tôi có thể xóa một phần tử khỏi ngăn xếp bằng cách sử dụng pop. Ví dụ,

#include <iostream>
#include <stack>
using namespace std;

// function prototype this command this command for display_stack utility
void display_stack(stack<string> st);

int main {

  // create a stack of strings
  stack<string> colors;

  // push elements into the stack
  colors.push("Red");
  colors.push("Orange");
  colors.push("Blue");
  
  cout << "Initial Stack: ";
  // print elements of stack
  display_stack(colors);

// loại bỏ “Blue”Khi nó được chèn các màu cuối cùng.pop;

  
  cout << "Final Stack: ";

  // print elements of stack
  display_stack(colors);
  
  return 0;
}

// utility function to display stack elements
void display_stack(stack<string> st) {

  while(!st.empty) {
    cout << st.top << ", ";
    st.pop;
  }

  cout << endl;
}

Output

Initial Stack: Blue, Orange, Red, 
Final Stack: Orange, Red,

Trong ví dụ trên, chúng tôi đã sử dụng pop để xóa một phần tử khỏi ngăn xếp.

Ban đầu, nội dung của ngăn xếp là {“Blue”, “Orange”, “Red”}.

Sau đó, chúng tôi đã sử dụng pop để loại bỏ phần tử.

// removes top element
colors.pop 

Thao tác này sẽ xóa phần tử ở đầu stack tức là phần tử được chèn cuối cùng, là “Blue”.

Do đó, ngăn xếp cuối cùng trở thành {“Orange”, “Red”}.

Truy cập các phần tử từ Stack

Chúng tôi truy cập phần tử ở đầu ngăn xếp bằng cách sử dụng top. Ví dụ,

#include <iostream>
#include <stack>
using namespace std;

int main {

  // create a stack of strings
  stack<string> colors;

  // push element into the stack
  colors.push("Red");
  colors.push("Orange");
  colors.push("Blue");
  
  // get top element

string top = colors.top;

  cout << "Top Element: " << top;
  
  return 0;
}

Output

Top Element: Blue

Trong ví dụ trên, chúng tôi đã tạo một chồng các chuỗi được gọi là màu và thêm các phần tử sau: “Red”, “Orange”“Blue”.

Sau đó chúng tôi đã sử dụng top để truy cập phần tử hàng đầu:

string top = colors.top; 

Nơi đây, “Blue” được chèn sau cùng, vì vậy nó là top element.

Nhận kích thước của ngăn xếp

Chúng tôi sử dụng size để có được số phần tử trong stack. Ví dụ,

#include <iostream>
#include <stack>
using namespace std;

int main {

  // create a stack of int
  stack<int> prime_nums;

  // push elements into the stack
  prime_nums.push(2);
  prime_nums.push(3);
  prime_nums.push(5);

// lấy kích thước của ngăn xếp int size = prime_nums.size;

  cout << "Size of the stack: " << size;

  return 0;
}

Output

Size of the stack: 3

Trong ví dụ trên, chúng ta đã tạo một chồng số nguyên được gọi là số nguyên tố và thêm ba phần tử vào đó.

Sau đó, chúng tôi đã sử dụng size để tìm số phần tử trong ngăn xếp:

prime_nums.size;

Vì chúng tôi đã thêm 3 phần tử vào ngăn xếp, prime_nums.size trả lại 3.

Kiểm tra xem ngăn xếp có trống không

Chúng tôi sử dụng empty để kiểm tra xem ngăn xếp có trống không. Phương thức này trả về:

  • 1(true)– nếu ngăn xếp trống
  • 0(false)– nếu ngăn xếp không trống

Ví dụ,

#include <iostream>
#include <stack>
using namespace std;

int main {

  // create a stack of double
  stack<double> nums;
  
  cout << "Is the stack empty? ";

// kiểm tra xem ngăn xếp có trống không if (nums.empty) {

    cout << "Yes" << endl;
  }
  else {
    cout << "No" << endl;
  }

  cout << "Pushing elements..." << endl;

  // push element into the stack
  nums.push(2.3);
  nums.push(9.7);
 
  cout << "Is the stack empty? ";

// kiểm tra xem ngăn xếp có trống không if (nums.empty) {

    cout << "Yes";
  }
  else {
    cout << "No";
  }

  return 0;
}

Output

Is the stack empty? Yes
Pushing elements...
Is the stack empty? No

Trong ví dụ trên, chúng tôi đã sử dụng empty để xác định xem stack trống rỗng,

if(nums.empty) { // returns false
  cout << "Yes" << end;;
}
else {
  cout << "No" << endl; 
}

Ban đầu, ngăn xếp không có phần tử nào trong đó. Vì thế nums.empty trả lại true.

Sau đó, chúng tôi đã thêm các phần tử vào ngăn xếp.

Một lần nữa, chúng tôi sử dụng nums.empty để xác định xem ngăn xếp có trống không. Lần này, nó trở lại false.

Trên đây là thông tin về Cách sử dụng ngăn xếp C ++ Để tìm hiểu thêm về ngăn xếp [Detailed Guide]. Nếu bạn có bất kì câu hỏi nào, xin vui lòng hỏi fixsy.org trong một bình luận bên dưới. Tôi rất vui khi được giúp đỡ bạn.