C++编写一个程序,在自定义函数中完成下列功能并在主函数中进行测试(下列要求中所说的栈均指顺序栈):( 1 )初始化栈S。( 2 )销毁栈S。( 3 )判断栈S是否为空。( 4 )将元素e入栈。( 5 )将栈顶元素出栈并保存到元素e中。
时间: 2024-10-11 20:07:16 浏览: 33
写自定义函数stringLower()实现将一个字符串中所有大写字母变为小写字母。在主函数中输入一含有大写字母的字符串,调用该函数并输出改变后的字符串。
5星 · 资源好评率100%
在C++中,你可以创建一个简单的栈类`Stack`,来实现上述功能。下面是一个简化的示例:
```cpp
#include <iostream>
using namespace std;
// 定义栈的结构体或类
template <typename T>
class Stack {
private:
T* elements; // 存储数据的数组
int top; // 栈顶指针
static const int MAX_SIZE = 10; // 栈的最大容量
public:
// 初始化栈
Stack() : elements(NULL), top(-1) {}
~Stack() { // 销毁栈
if (elements) {
delete[] elements;
elements = NULL;
}
}
// 判断栈是否为空
bool isEmpty() const {
return top == -1;
}
// 入栈操作
void push(const T& e) {
if (top >= MAX_SIZE - 1) {
throw overflow_error("Stack is full");
}
elements[++top] = e;
}
// 出栈操作
void pop(T& e) {
if (isEmpty()) {
throw underflow_error("Stack is empty");
}
e = elements[top--];
}
};
int main() {
try {
// 初始化栈
Stack<int> s;
// 测试栈的操作
s.push(1);
s.push(2);
cout << "Stack is not empty: " << (!s.isEmpty()) << endl;
int temp;
// 出栈并打印
s.pop(temp);
cout << "Popped element: " << temp << endl;
// 再次尝试出栈(此时已空)
s.pop(temp); // 这里会抛出异常,因为栈已空
} catch (const exception& e) {
cerr << "Error: " << e.what() << endl;
}
return 0;
}
```
在这个例子中,我们首先定义了一个模板栈`Stack<T>`,包含了初始化、销毁、检查是否为空、入栈和出栈的方法。然后在`main`函数中进行了测试。请注意,这个版本的栈仅支持整型元素,并且在满或空的情况下会抛出异常。
阅读全文