[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ự.
cộng 2 stack

#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;
}