c++堆栈类模板实现
时间: 2023-12-11 22:03:38 浏览: 101
好的,以下是一个简单的C++堆栈类模板实现:
```c++
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;
}
void push(const T& item) {
if (isFull()) {
throw "Stack is full!";
}
data[++top] = item;
}
T pop() {
if (isEmpty()) {
throw "Stack is empty!";
}
return data[top--];
}
};
```
相关问题
c++利用类模板实现一个简单的堆栈,支持数据压栈(push)和弹栈(pop)操作,要求 至少支持 int、float、double。
好的,以下是一个简单的堆栈类模板的实现,支持 int、float、double 三种数据类型:
```c++
#include <iostream>
using namespace std;
template <typename T>
class Stack {
private:
T* data;
int size;
int top;
public:
Stack(int size = 100) : size(size), top(-1) {
data = new T[size];
}
~Stack() {
delete[] data;
}
void push(T x) {
if (top == size - 1) {
cout << "Stack is full!" << endl;
return;
}
data[++top] = x;
}
T pop() {
if (top == -1) {
cout << "Stack is empty!" << endl;
return T();
}
return data[top--];
}
};
int main() {
Stack<int> s1(10);
s1.push(10);
s1.push(20);
s1.push(30);
cout << s1.pop() << endl;
cout << s1.pop() << endl;
cout << s1.pop() << endl;
Stack<float> s2(10);
s2.push(1.1);
s2.push(2.2);
s2.push(3.3);
cout << s2.pop() << endl;
cout << s2.pop() << endl;
cout << s2.pop() << endl;
Stack<double> s3(10);
s3.push(1.1);
s3.push(2.2);
s3.push(3.3);
cout << s3.pop() << endl;
cout << s3.pop() << endl;
cout << s3.pop() << endl;
return 0;
}
```
以上代码中,我们使用了类模板来定义 Stack 类,它包含了 push 和 pop 两个方法,分别用于压栈和弹栈操作。在构造函数中,我们可以指定堆栈的大小。在 push 方法中,我们首先检查是否已经满栈,然后将元素 x 压入堆栈顶部;在 pop 方法中,我们首先检查堆栈是否为空,然后将堆栈顶部元素弹出并返回。
在主函数中,我们创建了三个不同类型的堆栈对象 s1、s2、s3,并对它们进行了一些操作。
c++利用类模板实现一个简单的堆栈,支持数据压栈(push)和弹栈(pop)操作,要求 至少支持 int、float、double。
可以使用类模板来实现一个简单的堆栈,下面是一份示例代码:
```c++
#include <iostream>
using namespace std;
template <typename T>
class Stack {
private:
T *arr; // 存储数据的数组
int top; // 栈顶指针
int capacity; // 栈的容量
public:
Stack(int size = 100) { // 构造函数
capacity = size;
arr = new T[capacity];
top = -1;
}
~Stack() { // 析构函数
delete[] arr;
}
void push(T data) { // 入栈操作
if (top == capacity - 1) {
cout << "Stack Overflow" << endl;
return;
}
arr[++top] = data;
}
T pop() { // 出栈操作
if (top == -1) {
cout << "Stack Underflow" << endl;
return T();
}
return arr[top--];
}
};
int main() {
Stack<int> intStack(5);
intStack.push(10);
intStack.push(20);
intStack.push(30);
cout << intStack.pop() << endl;
Stack<float> floatStack(5);
floatStack.push(1.2f);
floatStack.push(2.3f);
floatStack.push(3.4f);
cout << floatStack.pop() << endl;
Stack<double> doubleStack(5);
doubleStack.push(1.23);
doubleStack.push(2.34);
doubleStack.push(3.45);
cout << doubleStack.pop() << endl;
return 0;
}
```
在这个示例中,我们定义了一个 Stack 类模板,它支持 int、float、double 类型的数据。Stack 类有一个私有成员变量 arr,它是存储数据的数组,还有一个 top 指针,它指向当前栈顶的位置。Stack 类有一个构造函数,可以指定栈的容量,如果不指定,则默认为 100;还有一个析构函数,用来释放存储数据的数组。Stack 类还有两个公有成员函数,push 和 pop,分别用于将数据入栈和出栈。在 push 函数中,如果栈已满,则输出 "Stack Overflow";在 pop 函数中,如果栈为空,则输出 "Stack Underflow"。
在 main 函数中,我们分别使用 int、float、double 类型的 Stack 对象,并进行了一些入栈和出栈操作,最后输出了每个栈的栈顶元素。
阅读全文