[Thuật toán] Cộng Stack
Về các phép toán trên Stack các bạn có thể xem tại đây
Vì Stack là một dạng danh sách liên kết vào trước ra sau nên chúng ta không thể cộng trực tiếp 2 Stack. Giả sử cần cộng Stack S2 vào Stack S1, ta dùng 1 Stack trung gian Stemp để lưu trữ giá trị của S2 và sau đó chỉ việc đưa lần lượt các giá trị của Stemp vào S1.
Nếu cộng 2 Stack sang 1 Stack mới thì cần chuyển cả 2 Stack sang Stack trung gian rồi mới chuyển sang Stack chính cần cộng. Cộng nhiều Stack cũng làm tương tự.
#include <iostream> #include <stack> using namespace std; int main(){ stack <int> S1; stack <int> S2; stack <int> Stemp; // create 2 Stack for (int i = 0; i < 5; i++) S1.push(i); // S1 : 0 1 2 3 4 for (int i = 5; i < 10; i++) S2.push(i); // S2 : 5 6 7 8 9 // move S2 to Stemp; while (!S2.empty()){ int x = S2.top(); S2.pop(); Stemp.push(x); // Stemp : 9 8 7 6 5 } // move Stemp to S1 while(!Stemp.empty()){ int x = Stemp.top(); Stemp.pop(); S1.push(x); // S1 : 0 1 2 3 4 5 6 7 8 9 } // show S1 while (!S1.empty()){ int x = S1.top(); S1.pop(); cout << x << " "; } return 0; }
Phản hồi gần đây