时间限制:1000ms
内存限制:256M
实验目的:
编写代码,实现一个简单的顺序栈。
实验要求:
1、每个栈元素是一个union类型,例如:
union unData //栈元素的数据类型为Union,Union共用同一块存储空间 { int d; char c; };
提示:union结构体中的变量共用同一个存储空间,即d和c变量的地址码相同
2、顺序栈的类型定义如下:
typedef unData datatype; //栈元素类型,修改为混合型 const int maxsize = 100; //栈容量 typedef struct { datatype data[maxsize]; int top; } sqstack; //顺序栈类型
3、自定义输入顺序栈的各个元素的取值
实验运行示例:
Input
程序启动后,依次input的信息如下:
1、输入自定义的字符串
Output
完成上述所有输入信息后,程序依次output的信息如下:
1、判断当前顺序栈是否为空?若为空,输出“true”,否则,输出“false”
2、完成一次出栈操作,并以字符形式输出本次出栈的元素信息
3、获取当前顺序栈的栈顶元素信息,并以ASCII码形式输出
输入案例1
4+1-2+3
输出案例1
false 3 43
输入案例2
1
输出案例2
false 1 栈空,无栈顶可取!
输入案例3
kjahsdfjkghasdfiauyfkjahsdfjkghasdfiauyfkjahsdfjkghasdfiauyfkjahsdfjkghasdfiauyfkjahsdfjkghasdfiauyf1
输出案例3
栈满,不能进栈!
代码如下:
#include<iostream>
#include<cstdlib>
using namespace std;
union unData //栈元素的数据类型为Union,Union共用同一块存储空间
{
int d;
char c;
};
typedef unData datatype; //栈元素类型,修改为混合型
const int maxsize = 100; //栈容量
typedef struct {
datatype data[maxsize];
int top;
} sqstack; //顺序栈类型
void init_sqstack(sqstack *sq){
sq->top=-1;
}
int empty_sqstack(sqstack *sq){
if(sq->top==-1)
return 1;
else
return 0;
}
int push_sqstack(sqstack *sq,datatype x1){
if(sq->top==maxsize-1) {
cout<<"栈满,不能进栈!"<<endl;
return -1;
}
sq->data[++sq->top]=x1;
return 1;
}
int pop_sqstack(sqstack *sq,datatype *x){
if(sq->top==-1) {
cout<<"栈空,无栈顶可取!"<<endl;
return -1;
}
*x=sq->data[sq->top--];
return 1;
}
int gettop_sqstack(sqstack *sq,datatype *x){
if(sq->top==-1) {
cout<<"栈空,无栈顶可取!"<<endl;
return -1;
}
*x=sq->data[sq->top];
return 1;
}
int main(){
sqstack *sq=new sqstack;
char s[300];
int i=0,a,b,d;
datatype x,y;
cin>>s;
init_sqstack(sq);
for(int i=0;s[i]!=NULL;i++){
datatype x1;
x1.c=s[i];
x1.d=s[i];
d=push_sqstack(sq,x1);
if(s[i]==NULL) break;
if(d==-1) break;
}
if(d!=-1){
a=empty_sqstack(sq);
if(a==1) cout<<"true"<<endl;
else cout<<"false"<<endl;
pop_sqstack(sq,&x);
cout<<x.c<<endl;
b=gettop_sqstack(sq,&y);
if(b==1) cout<<y.d<<endl;
}
return 0;
}