一、实验要求和目的
要求:使用visual C++软件实现双栈共享数组,编写其POP&PUSH过程。要求输入1-100的整数,取3的整数倍压栈到S1,其余到栈S2,栈满后,再分别弹出到栈空,输出栈POP结果及过程中上下溢出的信息。
目的:学习栈的实现和POP&PUSH的编写。
二、数据结构
定义一个长度为maxsize的数组,栈S1和栈S2的分别指向数组的第一个和最后一个存储单元实现双栈共享一个数组存储空间。
三、算法描述
定义一个整数型数组a[],由用户确定存储空间的大小,即maxsize的数值。设置两个变量i,j分别为数组的首下标和尾下标,同时作为栈S1和栈S2的栈底。
用户输入数据,判断是否为3的倍数。若是则压栈到S1,即令a[i]等于输入的数值,同时i++;不是,则压栈到S2,即令a[j]等于输入的数值,同时j--。如果i>j或者j<i,说明栈满,跳出循环。
四、测试数据
1.maxsize=5
输入:1 2 3 4 0
输出:S1:3
S2:4 2 1
2.maxsize=5
输入:1 2 3 4 5 6 7
输出:Full!
S1:3
S2:5 4 2 1
3.maxsize=5
输入:3 6 0
输出:S1:6 3
S2 is empty!
#include<iostream>
using namespace std;
int main(){
int maxsize,i=0,j,x;
cout<<"Input maxsize!"<<endl;
cin>>maxsize;
j=maxsize-1;
int *a=new int [maxsize];
cout<<"Input natural data smaller than 100, ended with 0!"<<endl;
while(cin >>x&&x!=0){
if(x%3==0){
a[i]=x;i++;
if(i>j){ //判断是否溢出
cout<<"Full!"<<endl;
break;
}
}
else{
a[j]=x;j--;
if(j<i){ //判断是否溢出
cout<<"Full!"<<endl;
break;
}
}
}
if(i==0) //出栈
cout<<"S1 is empty!"<<endl;
else{
for(i=i-1;i>=0;i--){
cout<<a[i]<<" ";
}
cout<<endl;
}
if(j==maxsize-1)
cout<<"S2 is empty!"<<endl;
else{
for(j=j+1;j<=maxsize-1;j++){
cout<<a[j]<<" ";
}
cout<<endl;
}
}