两栈共享空间

枚举类型:

enum flag{left,right};
cout
<<sizeof(flag)<<endl;//4
flag a;//a=0;//error C2440: “=”: 无法从“int”转换为“wmain::flag”
a=left;  //right
cout<<a<<endl;//0
a=flag(0);//right

 

 

 栈满

 

栈1空:top1==-1

栈2空:top2==Stack_size

栈满:top1+1==top2

const int Stack_Size=100
enum flag{left,right}; 
template 
<class T>
class BothStack 
{
  
public:
       BothStack( );
       
~BothStack( ); 
       
void Push(int i, T x);   
       T Pop(
int i);          
       T GetTop(
int i);       
       
bool isEmpty(int i)const{//i==0||i==1 
           assert(i==0||i==1);
           
if(i==0)
               
return top1==-1?true:false;
           
else
               
return top2==Stack_Size?true:false;
      }
       
bool isFull()const{
           
return top1+1==top2?true:false;
      } 
  
private:
       T data[Stack_Size];     
       
int top1, top2;   
       flag f;     
};

//data[0Stack_size-1],则空栈是-1和Stack_size
template<class T>
BothStack
<T>::BothStack()
{
    top1
=-1//栈1为空栈
    top2=Stack_size;//栈2为空栈
}

/*注意:这里的i只能取值为0或1*/
template
<class T>
void BothStack<T>::Push(int i, T x)
{
    assert(i
==0||i==1);
    assert(
!isFull());
    f
=flag(i);
    
//在栈1中压栈
    if(f==left)
        data[
++top1]=x;
    
else
        data[
--top2]=x;
}

template
<class T>
T BothStack
<T>::Pop(int i)
{
    assert(i
==0||i==1);
    assert(
!isEmpty(i));
    f
=flag(i);
    
if(f==left)
        
return data[top1--];
    
else
        
return data[top2++];
}

template
<class T>
T BothStack
<T>::GetTop(int i)
{
    assert(i
==0||i==1);
    assert(
!isEmpty(i));
    f
=flag(i);
    
if(f==left)
        
return data[top1];
    
else
        
return data[top2];
}
posted on 2008-11-28 15:00  风荷小筑  阅读(247)  评论(0编辑  收藏  举报