#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, <
|