一聚教程网:一个值得你收藏的教程网站

热门教程

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

时间:2022-07-02 10:59:27 编辑:袖梨 来源:一聚教程网

 #include
#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<<"插入操作成功!nn"; *s.top1++=x; }
 if(i==2) {cout<<"插入操作成功!nn"; *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,