Stack:删除并返回栈顶元素?

在C++中,stack提供了删除栈顶元素的算法

stack<int>stk;
stk.pop();

但是有时候,我们希望在删除的同时能够知道这个栈顶元素是什么,而pop()是不能返回栈顶元素的!因此,我们应如下办法:

stack<int>stk;
int s = stk.top();
stk.pop();

 

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
任务描述 编写一个程序,定义一个栈类 stack,用一个动态整型数组存放栈的数据。 栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。 类描述 成员变量 s_ptr: 一个指向栈顶的指针。 成员变量 s_size: 一个表示当前栈大小的整型变量。 成员函数 stack();: 构造函数,初始化栈的大小为 20。 成员函数 stack(const stack &s);: 拷贝构造函数。将一个对象拷贝初始化当前对象。 成员函数 ~stack();: 析构函数。回收栈顶指针,并将 s_ptr = nullptr。 成员函数 int get_size();: 获取当前栈的大小。 成员函数 bool push(int);: 添加一个元素栈顶。若添加成功,返回 true。反之,返回 false。ps: 当栈满的时候会添加失败。 成员函数 bool pop();: 删除栈顶元素。若删除成功,返回 true。反之,返回 false。ps: 当栈空的时候会删除失败。 成员函数 int top();: 返回当前栈顶元素。ps: 不会出现栈空调用 top() 的例子。 成员函数 void print();: 输出占一行,以栈顶到栈尾的顺序打印栈中的元素, 且每个元素以空格进行分割。
05-27
好的,我理解了你的问题。以下是一个基本的栈类的实现,满足你的要求: ```c++ #include <iostream> class stack { private: int *s_ptr; int s_size; public: stack(); stack(const stack &s); ~stack(); int get_size(); bool push(int); bool pop(); int top(); void print(); }; stack::stack() { s_ptr = new int[20]; s_size = 0; } stack::stack(const stack &s) { s_ptr = new int[s.s_size]; s_size = s.s_size; for (int i = 0; i < s_size; i++) { s_ptr[i] = s.s_ptr[i]; } } stack::~stack() { delete[] s_ptr; s_ptr = nullptr; } int stack::get_size() { return s_size; } bool stack::push(int x) { if (s_size == 20) { return false; } else { s_ptr[s_size++] = x; return true; } } bool stack::pop() { if (s_size == 0) { return false; } else { s_size--; return true; } } int stack::top() { return s_ptr[s_size - 1]; } void stack::print() { for (int i = s_size - 1; i >= 0; i--) { std::cout << s_ptr[i] << " "; } std::cout << std::endl; } ``` 这个栈类使用一个动态整型数组来存储栈中的元素。构造函数初始化栈大小为 20,拷贝构造函数将一个对象拷贝初始化当前对象,析构函数回收栈顶指针并将 s_ptr 置为 nullptr。get_size() 函数返回当前栈的大小,push() 函数添加一个元素栈顶,pop() 函数删除栈顶元素,top() 函数返回当前栈顶元素,print() 函数以栈顶到栈尾的顺序打印栈中的元素。 请注意,在 push() 和 pop() 函数中,我们需要检查栈是否已满或者已空。如果栈已满,push() 函数将返回 false,表明添加元素失败。如果栈已空,pop() 函数将返回 false,表明删除元素失败。在 top() 函数中,我们假设栈不为空,因此不需要进行检查。 希望这个栈类的实现能够帮助到你。如果你有任何问题,可以继续问我。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值