双栈的定义与简单操作

双栈定义: 

typedef struct
{
  int top[2],bot[2];
  int *v;
  int length;
}DblStack;

初始化双栈:

#define maxsize 100
void InitDblStack(DblStack &s)
{
  s.v= new int [maxsize];
  if(!s.v)
  {
    cout<<"Failed to create one stack";
    exit(1);
  }
  s.length=maxsize;
  s.bot[0]=0; s.bot[1]=s.length-1;
  s.top[0]=s.bot[0];
  s.top[1]=s.bot[1];
}

判断栈空:

# define True  1
# define False 0

int IS_emptystack(DblStack &s)
{
  if(s.bot[0]==s.top[0]&&s.bot[1]==s.top[1])
      return True;
  else 
      return False;
}

判断栈满:

int IS_fullstack(DblStack &s)
{
  if((s.top[0]-1)==s.top[1])  return True;
  else return False; 
}

入栈(有两种方式:  1.top[0]入栈    2. top[1]入栈):

void Push_S(DblStack &s,int e,int style)// style决定了入栈方式(style 可以输入0或1)
{
  if(IS_fullstack(s))
    {
      cout<<"栈满";
      return ;
    }
  if(style)// style-->1-->top[1]入栈方式
    {
      s.v[s.top[1]]=e;
      s.top[1]--;
    }
  else  // style-->0-->top[0]入栈方式
    {
      s.v[s.top[0]]=e;
      s.top[0]++;
    }
  return;
}

出栈(同样有两种方式):

int Pop_S(DblStack &s, int style)
{
  if(IS_emptystack(s))
    {
      cout<<"栈空";
      exit(1);
    }
  if(style)
    {
      s.top[1]++;
      return s.v[s.top[1]];
    }
  else 
    {
      s.top[0]--;
      return s.v[s.top[0]];
    }
} 

本人不才,只能写出这么多,若存在错误欢迎指出 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值