使用动态分配内存的形式,构建一个其中数据类型为float的栈,将数据3.14,5.26,7.89依次压入栈中,每次压栈完成后,立即获取栈顶元素并输出,使用循环的形式进行出栈,直至栈为空。
时间: 2024-10-23 14:08:19 浏览: 30
数据结构期末复习提要 (2).pdf
在C++中,我们可以使用如下的代码来实现这个需求:
```cpp
#include <iostream>
class FloatStack {
public:
int top;
float* arr;
int size;
FloatStack(int n) : top(-1), arr(new float[n]), size(n) {}
// 压栈
void push(float num) {
if (top == size - 1) {
std::cout << "Stack overflow!" << std::endl;
return;
}
arr[++top] = num;
}
// 出栈并获取栈顶元素
float pop() {
if (top == -1) {
std::cout << "Stack underflow!" << std::endl;
return 0.0f; // 返回默认值
}
float ret = arr[top];
top--;
return ret;
}
private:
// 自动管理内存
~FloatStack() {
delete[] arr;
}
};
int main() {
FloatStack myStack(3); // 创建一个大小为3的栈
for (int i = 0; i < 3; ++i) {
myStack.push(i * 1 + (float)i / 10); // 假设我们要压入3.14, 5.26, 7.89
std::cout << "Popped: " << myStack.pop() << std::endl;
}
// 循环出栈直到栈空
while (!myStack.isEmpty()) { // 假设有一个isEmpty方法来判断栈是否为空
std::cout << "Popped: " << myStack.pop() << std::endl;
}
return 0;
}
```
这段代码首先定义了一个`FloatStack`类,包含一个动态分配的`float`数组`arr`,以及相关的栈顶索引管理和内存释放机制。然后在主函数中,创建一个`myStack`实例,依次压入给定的数字,并在每次压栈后立即通过`pop`方法取出并打印栈顶元素。最后,当栈为空时退出循环。
注意:这里假设了`FloatStack`类需要有一个`isEmpty`方法来检查栈是否为空,但在标准库中并没有这样的成员函数,所以你需要自行添加。另外,出栈的顺序会按照压栈的相反顺序进行。
阅读全文