您的位置:首页 > 编程语言

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

2008-04-08 22:23 260 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐