1802 类设计练习3:编写一个stack类.part.1

肇砖oj题,仅供参考,不怕被钟sir封号三周你就抄

Description

编写一个 stack 栈类,约定:

1. 封装数据和操作

2. 数据成员为私有属性,包括:

  • data :保存栈内元素,栈元素类型为 int

  • t : 指示栈顶位置

  • len : 当前栈空间的大小

3. 成员函数为公有属性,包括:

  • 默认构造函数,完成初始化动作,栈的默认大小是 1000 。最后输出一行:constructing

  • 析构函数只输出一行:destructing

  • top( &v ),函数返回如果为真,参数 v 带回栈顶元素的值;函数返回如果为假,参数 v 的值没有变化

  • pop(),如果栈不空,弹走栈顶元素;如果栈空,没有动作

  • push( v ),如果栈已满,没有动作;如果栈未满,参数 v 的值进栈

  • size(),返回当前栈内元素个数,如果栈空,返回 0

  • output(),自栈底到栈顶,输出栈内元素,每一个元素后面跟一个空格,作为分隔。最后换行。如果栈空,没有输出

Input

多条命令,每种命令定义如下:

  • 1 a :表示把元素 a 压入栈

  • 2   :表示弹走栈顶元素

  • 3   :表示读取栈顶元素的值

  • 4   :表示输出当前栈内元素的个数

  • 5   :表示调用 output() 函数

输入的第一行是命令的数量 n

接下来 n 行,每行是一条命令

Output

对第 3、4、5 类命令,输出一行:该命令对应取得的结果

Sample Input

10
1 3
1 5
1 7
3
2
4
2
1 9
5
3

Sample Output

constructing   <---- 默认构造函数输出
7      <---- 当前栈顶元素是7
2      <---- 弹走了7,所以只剩下2个元素
3 9    <---- 弹走了5,压入了9,所以栈内的元素是3,9
9      <---- 栈顶元素是9
destructing   <---- 析构函数输出

Hint

下面这个测似用例是容易错的情况:
5
1 3
2
2
   <---- 这里容易错,就是栈空时调用pop()
3   <---- 这里也容易错,就是栈空时调用top()
5   <---- 这里也容易错,就是栈空时调用output()

输出结果:

1 3
2
2    <---- 这时栈空,pop()无需任何动作
3    <---- 这时栈空,top()函数返回值应该是false。如果这里输出了内容,就是错了
5    <---- 这里栈空,output()无需输出任何内容

 

Author


 

#include<iostream>
#include<cstdlib>
using namespace std;

class stack{
private: 
	int top,len;
	int data[1000];
	public:
	stack (){
		int *data=new int[10];
		top=-1,len=0;
		cout<<"constructing"<<endl;
	}
	void push(int n){
		top++,len++;
		data[top]=n;
		//cout<<data[top]<<endl;
	}
	void gettop(){
		if(len<=0) return;
		cout<<data[top]<<endl;
	}
	void pop(){
		if(len<=0) len=0;
		else {
		len--;
		data[top]=-1111;
		top--;
		}
	}
	void size(){
		cout<<len<<endl;
	}
	void output(){
		int n;
		if(len<=0) return;
		else{
		for(n=0;n<len;n++)
		cout<<data[n]<<" ";
		cout <<endl;}
	}
	~stack(){
	//	delete[]data;
		cout<<"destructing"<<endl;
	}
};
int main(){
	stack s;
    int num,i,ch;
    cin>>num;
    for(i=1;i<=num;i++){
    	cin>>ch;
    	if(ch==1){
    		int j;
    		cin>>j;
    		s.push(j);
		}
		if(ch==2) s.pop();
		if(ch==3) s.gettop();
		if(ch==4) s.size();
		if(ch==5) s.output();
	}
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值