#pragma once #include using namespace std; // TODO: 实现动态开辟数组的大小 template class ArrayStack { public: ArrayStack(int s = 10); // 默认的栈容量为10 T getTop(); // 获取栈顶元素 void push(T t); // 入栈 void pop(); // 出栈 bool isEmpty(); // 判断是否为空 int getSize(); // 获取栈的大小 private: int top = -1; // 栈顶指针,指向-1代表空栈 int size = 0; // 栈的最大容量 T *array; // 用数组存储栈 }; template ArrayStack::ArrayStack(int s) : size(s), top(-1) { array = new T[size]; } // 判断是否为空 template bool ArrayStack::isEmpty() { return top == -1; // tp[为-1时栈空,返回true } // 返回栈的大小 template int ArrayStack::getSize() { return top + 1; // 因为索引是从零开始,大小是索引 + 1 } // 入栈 template void ArrayStack::push(T t) { if (top + 1 != size) // 先判断是否栈满 { array[++top] = t; // 先在数组中top的位置上赋予t,然后top++ } else { puts("栈满!"); } } // 出栈 template void ArrayStack::pop() { if (top + 1 != 0) // 先判断是否为空栈,如果是空就没有元素可以返回 { top--; } else { puts("栈空!"); } } // 获取栈顶元素 template T ArrayStack::getTop() { if (top != -1) { return array[top]; } else { throw out_of_range("这是一个空栈"); system("pasue"); } }