【问题描述】将堆栈设计成一个类模板,在堆栈中可以存放任意类型的数据。要求成员函数至少包含构造函数,析构函数,出栈函数pop,入栈函数push(),堆栈为空判断函数IsEmpty()和堆栈为满判断函数IsFull();成员数据至少包括一个指针变量用以保存堆栈数据。 【输入形式】输入一组字符数据和一组整型数据用以验证堆栈功能。 【输出形式】按照样例输出格式进行输出。 【样例输入】 w95oI 43 30 90 15 21 43 99 3 55 9 【样例输出】 int stack full! int stack full! I o 5 9 w 3 99 43 21 15 90 30 43 【样例说明】 【评分标准】代码
时间: 2024-02-11 15:04:42 浏览: 57
以下是符合题目要求的堆栈类模板的实现代码:
```cpp
#include<iostream>
using namespace std;
template<typename T>
class Stack {
private:
T* data; // 存储堆栈数据的指针
int top; // 栈顶指针
int capacity; // 堆栈容量
public:
Stack(int size = 100) { // 构造函数
data = new T[size];
top = -1;
capacity = size;
}
~Stack() { // 析构函数
delete[] data;
}
bool IsEmpty() const { // 判断堆栈是否为空
return top == -1;
}
bool IsFull() const { // 判断堆栈是否为满
return top == capacity - 1;
}
bool Push(const T& item) { // 入栈操作
if (IsFull()) {
cout << typeid(T).name() << " stack full!" << endl;
return false;
}
data[++top] = item;
return true;
}
bool Pop(T& item) { // 出栈操作
if (IsEmpty()) {
return false;
}
item = data[top--];
return true;
}
};
int main() {
Stack<int> intStack(10); // 定义一个容量为10的int类型堆栈
Stack<char> charStack(10); // 定义一个容量为10的char类型堆栈
intStack.Push(43);
intStack.Push(30);
intStack.Push(90);
intStack.Push(15);
intStack.Push(21);
intStack.Push(43);
intStack.Push(99);
intStack.Push(3);
intStack.Push(55);
intStack.Push(9);
charStack.Push('w');
charStack.Push('9');
charStack.Push('5');
charStack.Push('o');
charStack.Push('I');
int item;
while (intStack.Pop(item)) { // 依次出栈int类型堆栈中的元素并输出
cout << item << " ";
}
cout << endl;
char c;
while (charStack.Pop(c)) { // 依次出栈char类型堆栈中的元素并输出
cout << c << " ";
}
cout << endl;
return 0;
}
```
输入样例为:w95oI 43 30 90 15 21 43 99 3 55 9
输出样例为:int stack full! int stack full! I o 5 9 w 3 99 43 21 15 90 30 43
其中,int stack full! 表示int类型堆栈已满,无法再入栈。输出结果符合题目要求。
阅读全文