双向栈的初始化,压栈,出栈

双向栈类型定义如下:

typedef struct {
    SElemType *elem;
    int top[2];
    int size; // 分配给elem的总容量
}TwoWayStack; // 双端栈

//初始化

Status InitStack(TwoWayStack &tws, int size)
{ 
    tws.elem=(SElemType*)malloc(sizeof(SElemType)*size); //申请空间
    tws.size=size; 
    tws.top[0]=0; 
    tws.top[1]=size-1; 
    return OK; 
}

//压栈

Status Push(TwoWayStack &tws, int i, SElemType x)
{
    int w=tws.top[0]; 
    if(w==tws.top[1]) return ERROR;     //栈满
    else if(i==0) 
    { 
        tws.elem[tws.top[0]]=x; 
        tws.top[0]=tws.top[0]+1;    //容量情况
    } 
    else if(i==1) 
    { 
        tws.elem[tws.top[1]]=x; 
        tws.top[1]=tws.top[1]-1; 
    } 
    return OK; 

}

//出栈

Status Pop(TwoWayStack &tws, int i, SElemType &x)
{
     if(tws.top[1]==tws.size-1&&i==1)   //空栈
        return ERROR;           
    else if(tws.top[0]==0&&i==0)
         return ERROR; 
    else if(i==0) 
    { 
        tws.top[0]-=1; 
        x=tws.elem[tws.top[0]]; 
    } 
    else if(i==1) 
    { 
        tws.top[1]+=1; 
        x=tws.elem[tws.top[1]]; 
    } 
    return x; 
}

你可能感兴趣的:(数据结构(C语言))