www.pudn.com > stacks.rar > stacks.cpp


#include 
#include 
 
int count; 
template 
class Stack{ 
public: 
	Stack(int Max=10); 
	Stack(Stack & ); 
	~Stack(){delete []stack;} 
	bool Empty()const{return top==-1;} 
	bool Full()const{return top==Maxtop;} 
	T Top()const; 
	Stack&Push(const T&x); 
	Stack&Pop(T&x); 
private: 
	int top; 
	int MaxTop; 
    T *stack; 
}; 
template 
Stack::Stack(int Max) 
{ 
	MaxTop=Max-1; 
	stack=new T[Max]; 
	top=-1; 
} 
template 
Stack::Stack(Stack &s) 
{ 
	 
	stack=new T[s.MaxTop+1]; 
	MaxTop=s.MaxTop; 
	top=s.top; 
	for(int i=0;i<=top;i++) 
	{ 
		stack[i]=s.stack[i]; 
	} 
} 
template 
T Stack::Top()const 
{ 
	if(Empty())throw OutOfBounds(); 
	else return stack[top]; 
} 
template 
Stack&Stack::Push(const T&x) 
{ 
	stack[++top]=x; 
	return *this; 
} 
template 
Stack&Stack::Pop(T&x) 
{ 
	 
	x=stack[top--]; 
	return *this; 
} 
 
void cp(Stack &jin,Stack &zg,int *chu,int k,int n,ofstream &out,int j) 
{ 
	int p,i; 
	Stack jin1(jin); 
	Stack zg1(zg); 
 
	if(j==0) 
	{ 
		jin1.Pop(p); 
		zg1.Push(p); 
	} 
	else{ 
        zg1.Pop(chu[k]); 
		k++; 
	} 
	if(jin1.Empty()&&zg1.Empty()) 
	{ 
		for(i=0;i>n; 
	ofstream out("output.txt"); 
	int *chu; 
	chu=new int[n]; 
	for(i=0;i zg(n); 
	Stack jin(n); 
	count=0; 
	for(i=n;i>0;i--) 
		jin.Push(i); 
	cp(jin,zg,chu,k,n,out,j); 
	out<