两个栈共用一个顺序存储空间的代码

 #include<iostream.h>
#define STACK_INIT_SIZE 10//存储的初始分配

struct Dblstack{
 int *base1;
 int *base2;
 int *top1;
 int *top2;
 int stacksize;//当前分配的存储空间,以元素为单位
};


int Initstack(Dblstack &s)
{//构造一个空的顺序栈s
 s.base1=new int[STACK_INIT_SIZE];
 if(!s.base1){cout<<"申请内存失败!/n";return 0;}
 s.top1=s.base1+1;
 s.stacksize=STACK_INIT_SIZE;
 s.base2=s.base1+s.stacksize;
 s.top2=s.base2-1;
 return 1;
}

int emptystack(Dblstack &s,int i)
{//判断栈是否为空,是返回1,否则返回0
 if(i==1&&s.top1==s.base1+1||i==2&&s.top2==s.base2-1)
  return 1;
 else return 0;
}

int fullstack(Dblstack &s)
{//判断栈是否已经满,若栈满则返回1否则返回0
 if(s.top1==s.top2) return 1;
 else return 0;
}

int push(Dblstack &s,int i,int x)
{//插入元素x作为新的栈顶元素
 if(fullstack(s)){ cout<<"栈满/n"; return 0;}
 else{
    if(i==1) {cout<<"插入操作成功!/n/n"; *s.top1++=x; }
 if(i==2) {cout<<"插入操作成功!/n/n"; *s.top2--=x; }
 }return 1;
}

int pop(Dblstack &s,int i,int &x)
{//若栈不为空则删除i栈中的栈顶元素用x返回,否则返回0
 if(emptystack(s,i)) return 0;
 else{
 if(i==1) {cout<<"出栈成功!出栈元素为:"; x=*--s.top1; }
 if(i==2) {cout<<"出栈成功!出栈元素为:"; x=*++s.top2; }
 }return 1;
}

int gettop(Dblstack &s,int i,int &x)
{//若栈不为空,则用x返回栈顶元素,并返回真,否则返回0
 if(emptystack(s,i)) return 0;
 else{
 if(i==1) { x=*(s.top1-1); cout<<"/n出栈成功!栈顶为:"; }
 if(i==2) { x=*(s.top2+1); cout<<"/n出栈成功!栈顶为:"; }
 }return 1;
}

int clearstack( Dblstack &s)
{//若栈为空返回1,否则将栈置为空后返回1
 if(emptystack(s,1)&&emptystack(s,2)) return 1;
 else {s.top1=s.base1+1; s.top2=s.base2-1;}
 return 1;
}


int stacktraverse(Dblstack  s)
 { // 从栈底到栈顶依次输出栈中每个元素
   // 一旦visit()失败,则操作失败
   while(s.top1-1>s.base1)
   {  s.base1++;
     cout<<*s.base1<<'/t';
   }
   while(s.top2+1<s.base2)
   {   s.base2--;
    cout<<*s.base2<<'/t';
   }
   cout<<endl;
   return 1;
 }


void welcome()              //界面的欢迎函数
{
 cout<<"/t欢迎使用本程序"<<endl;
 cout<<"/t本程序为顺序栈的公用问题"<<endl;
 cout<<"/t1进入程序/t0退出程序"<<endl;
 cout<<"/t请选择你的操作!"<<endl;
}

void menue()//菜单界面函数
{       cout<<"/t请你选择所需要的操作/n";
     cout<<"/t1-元素入栈/t2-元素出栈/n";
  cout<<"/t3-取栈顶元素/t4-测栈空/n";
  cout<<"/t5-清空栈/t6-遍历/n";
  cout<<"/t/t7-退出/n";
  
}

void main()
{   
 int choice,e,x,i;
 Dblstack s;
 Initstack(s);
 welcome();
 cin>>e;
    if(e==1)
 {
      do{menue();
   cin>>choice;
  switch(choice)
   {
   case 1://入栈
    cout<<"请输入插入元素的值!";
    cin>>x;
    cout<<"/n选择插入哪个栈顶!(1||2):";
    cin>>i;
    cout<<endl;
    push(s,i,x); 
    break;
        case 2://出栈
          cout<<"请选择出栈元素所在的栈:";
    cin>>i;
    cout<<endl;
    if(emptystack(s,i)){cout<<"此栈空!/n";break;}
    else{
    pop( s,i,x);
    cout<<x<<endl;
    cout<<endl;
    break;
    }
       case 3://获取栈顶元素
       cout<<"请选择取栈顶元素所在的栈:/n";
    cin>>i;
    gettop( s, i, x);
                cout<<x<<endl;
       break;
     
      case 4://测栈空
        if(emptystack(s,1)&&emptystack(s,2))
      cout<<"栈空"<<endl;
        else
         cout<<"栈不空"<<endl;
        break;
   case 5://清空栈
              clearstack( s);
     break;
   case 6:
    stacktraverse(s);
              break;
     case 7:
    cout<<"程序结束"<<endl;
      break;
     default:
       cout<<"不合适的操作/n";
  break;
  }
 }while(choice!=7);
     }cout<<"感谢使用此程序:"<<endl;
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值