文章详情
C++模拟栈操作类
Posted on 2022-10-01 13:17:14 by 主打一个C++
C++模拟栈操作类,遵循先进后出原则
扩展:元素反转、允许压入任意类型数据
//头文件封装
#include <iostream>
#include <algorithm> // 用于std::reverse
template<typename T>
class Stack {
public:
// 构造函数
Stack() : top(-1), capacity(10) {
array = new T[capacity];
}
// 析构函数
~Stack() {
delete[] array;
}
// 弹出栈顶元素
T pop() {
if (top < 0) {
std::cerr << "Stack is empty!" << std::endl;
return T(); // 返回默认值
}
return array[top--];
}
// 压入元素到栈顶
void push(T value) {
if (top == capacity - 1) {
resize();
}
array[++top] = value;
}
// 反转栈中的元素
void invert() {
std::reverse(array, array + top + 1);
}
int size() const {
return top + 1;
}
private:
T* array; // 存储栈元素的数组
int top; // 栈顶索引
int capacity; // 数组容量
// 扩容数组
void resize() {
capacity *= 2;
T* newArray = new T[capacity];
for (int i = 0; i <= top; ++i) {
newArray[i] = array[i];
}
delete[] array;
array = newArray;
}
};
//调用测试
int main() {
Stack<char> stack; // 创建字符类型的栈
stack.push('a');
stack.push('b');
stack.push('c');
stack.push('d');
stack.push('e');
// 扩展反转
//stack.invert();
std::cout << "Stack size: " << stack.size() << std::endl;
while (stack.size() > 0) {
std::cout << "Popped: " << stack.pop() << std::endl;
}
return 0;
}
*转载请注明出处:原文链接:https://cpp.vin/page/44.html