顺序栈——基础

时间限制: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;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值