C++:编写一个程序,在自定义函数中完成下列功能并在主函数中进行测试(下列要求中所说的栈均指顺序栈) : (1)初始化栈S。 (2)销毁栈S。 (3)判断栈S是否为空。 (4)将元素e入栈。 (5)将栈顶元素出栈并保存到元素e中。
时间: 2024-10-14 19:03:28 浏览: 69
在C++中,你可以创建一个简单的顺序栈(也称为数组栈)来实现上述功能。首先,我们定义一个栈模板以及相关的成员变量和操作:
```cpp
#include <iostream>
using namespace std;
template <typename T>
class Stack {
private:
T* data; // 存储数据的数组
int top; // 栈顶指针
static const int MAX_SIZE = 100; // 栈的最大容量
public:
// 构造函数
Stack() : data(new T[MAX_SIZE]), top(-1) {}
// 初始化栈
void initStack() {
if (top == MAX_SIZE - 1) {
cout << "Stack is full.\n";
return;
}
top = -1;
}
// 销毁栈
~Stack() {
delete[] data;
}
// 判断栈是否为空
bool isEmpty() {
return top == -1;
}
// 入栈
void push(T value) {
if (top == MAX_SIZE - 1) {
cout << "Stack is full.\n";
return;
}
data[++top] = value;
}
// 出栈
void pop(T& value) {
if (isEmpty()) {
cout << "Stack is empty.\n";
return;
}
value = data[top];
top--;
}
// 访问栈顶元素但不删除它(仅用于演示,实际应用中不推荐这样做)
void peek(T& value) const {
if (isEmpty()) {
cout << "Stack is empty.\n";
} else {
value = data[top];
}
}
};
int main() {
Stack<int> s;
s.initStack();
// 测试
int e;
cout << "Pushing elements...\n";
s.push(1);
s.push(2);
s.push(3);
cout << "Is the stack empty? " << (s.isEmpty() ? "Yes" : "No") << "\n";
cout << "Popping elements...\n";
s.pop(e); // 将栈顶元素存到e中
cout << "Top element after pop: " << e << "\n";
// 注意这里peek只是为了展示,实际操作中不建议直接读取栈顶值,因为它可能会改变
s.peek(e);
cout << "Peeked element: " << e << "\n";
return 0;
}
```
这个程序会创建一个`Stack`模板类,并在`main`函数中实例化一个`Stack<int>`。然后按照题目要求依次对栈进行初始化、入栈、查看栈是否为空、出栈等操作。
阅读全文