【数据结构/C语言】编写实现这个双向栈tws的入栈操作Push(&tws, i ,e)和出栈操作的算法Pop(&tws,i,e)
假设以顺序存储结构实现一个双向栈,即在一维数组的存储空间中存在两个栈,它们的栈底分别设在数组的两个端点,栈顶指针分别指示栈顶元素的下一存储单元。试编写实现这个双向栈tws的入栈操作Push(&tws, i ,e)和出栈操作的算法Pop(&tws,i,e),其中i为1或2,用以分别指示设在数组两端的两个栈。其中双向栈的存储结构描述如下:
//双向栈类型描述如下:
typedef struct
{ SElemType *base1,*base2; //分别指示两个栈的栈底元素
SElemType *top1,*top2; //分别指示两个栈的栈顶元素的下一存储单元
} BDStacktype; //双向栈类型
Status Push(BDStacktype &tws,int i,SElemtype e)
//x入栈,i=1表示低端栈,i=2表示高端栈
{
if(tws.top[0]>tws.top[1])
return OVERFLOW; //注意此时的栈满条件
if(i==1)
*tws.top[0]++=e;
else if(i==2)
*tws.top[1]--=e;
else
return ERROR;
return OK;
}//Push
Status Pop(BDStacktype &tws, int i, SElemtype &e)
//x出栈,i=1表示低端栈,i=2表示高端栈
{
if(i==1)
{
if(tws.top[0]==tws.base[0])
return OVERFLOW; //注意此时的低端栈空的条件
e=*--tws.top[0];
}
else if(i==2)
{
if(tws.top[1]==tws.base[1])
return OVERFLOW; //注意此时的高端栈空的条件
x=*++tws.top[1];
}
else
return ERROR;
return OK;
}//Pop