任务描述 编写一个程序,定义一个栈类 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();: 输出占一行,以栈顶到栈尾的顺序打印栈中的元素, 且每个元素以空格进行分割。
时间: 2024-02-09 17:10:39 浏览: 183
好的,我理解了你的问题。以下是一个基本的栈类的实现,满足你的要求:
```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() 函数中,我们假设栈不为空,因此不需要进行检查。
希望这个栈类的实现能够帮助到你。如果你有任何问题,可以继续问我。
阅读全文
相关推荐


















