【两个栈实现一个队列】两个栈共用一个顺序存储空间的代码

更新时间:2015-02-23    来源:php常用代码    手机版     字体:

【www.bbyears.com--php常用代码】

 #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<<"插入操作成功!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,

本文来源:http://www.bbyears.com/jiaocheng/13161.html

猜你感兴趣