【数据结构/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
posted @ 2022-11-14 18:42  卞彦秋euReKa  阅读(153)  评论(0编辑  收藏  举报