【id:35】【20分】E. Stack(类与构造)

博客围绕栈类展开,栈是先进后出的线性表。介绍了堆栈类相关信息,如数据存于数组a,size为数组长度,top表示数组下标。说明了push、pop操作及判断栈空、栈满的条件,还给出输入输出测试要求,需完成类中方法实现并测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

上面是栈类的定义,栈是一种具有先进后出特点的线性表,请根据注释,完成类中所有方法的实现,并在主函数中测试之。

堆栈类的说明如下:

1. 堆栈的数据实际上是保存在数组a中,而a开始是一个指针,在初始化时,根据实际需求将a动态创建为数组,数组长度根据构造函数的参数决定。

2.size实际上就是数组的长度,当使用无参构造则size为10,当使用有参构造则size为s、

3.top表示数组下标,也表示数组中下一个存放数据的空白位置。

4.push操作表示堆栈的数组存放一个数据,例如一开始数组为空,则top为0,当有数据要入栈时,把数据存放在a[top]的位置,然后top加1指向下一个空白位置、数据进栈只能从栈顶进。

5.pop操作表示一个数据要出栈,数据出栈只能从栈顶出,先把top减1指向栈顶数据,然后把数据返回。

6.判断堆栈空的条件是top是否等于0,判断堆栈满的条件是top是否等于size

输入

测试数据的组数 t

第一个栈的大小

第一个栈的元素列表,将该列表的元素依次进栈

..........

输出

将栈元素依次出栈

样例查看模式

正常显示查看格式

输入样例1 <-复制

输出样例1

#include<iostream>
using namespace std;
class CStack
{
public:
    CStack();
    CStack(int s);
    int get(int index);
    void push(int n);
    int isempty();
    int isfull();
    int pop();
    ~CStack();
private:
    int* a;
    int size;
    int top;//表示数组下表
};
CStack::CStack()
{
    size = 10;
    top = 0;
    a = new int[10];
    cout << "Constructor." << endl;
}
CStack::CStack(int s)
{
    size = s;
    top = 0;
    a = new int[s];
    cout << "Constructor." << endl;
}
CStack::~CStack()
{
    delete[]a;
    cout << "Destructor." << endl;
}
int CStack::get(int index)
{
    return *(a + index);
}
void CStack::push(int n)
{
    a[top] = n;
    top++;
}
int CStack::isempty()
{
    if (top == 0)
    {
        return 0;//表示空
    }
}
int CStack::isfull()
{
    if (top == size)
    {
        return 1;
    }
}
int CStack::pop()
{
    return a[--top];
}
int main()
{
    int i, t, size1, j, m;
    cin >> t;
    for (i = 0; i < t; i++)
    {
        cin >> size1;
        CStack CStack1(size1);
        for (j = 0; j < size1; j++)
        {
            cin >> m;
            CStack1.push(m);
        }
        for (j = 0; j < size1 - 1; j++)
            {
                cout << CStack1.pop() << " ";
            }
            cout << CStack1.pop() << endl;
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值