#include // 节点结构 template struct Node { T data; Node* next; Node(const T& data) : data(data), next(nullptr) {} }; // 链栈类模板 template class LinkStack { private: Node* top; // 栈顶指针 size_t size; // 栈大小 public: // 构造函数 LinkStack() : top(nullptr), size(0) {} // 析构函数 ~LinkStack() { while (!isEmpty()) { pop(); } } // 判断栈是否为空 bool isEmpty() const { return top == nullptr; } // 获取栈的大小 size_t getSize() const { return size; } // 入栈操作 void push(const T& data) { Node* newNode = new Node(data); newNode->next = top; top = newNode; ++size; } // 出栈操作 void pop() { if (isEmpty()) { std::cout << "Stack is empty, cannot pop.\n"; return; } Node* temp = top; top = top->next; delete temp; --size; } // 获取栈顶元素 T peek() const { if (isEmpty()) { throw std::runtime_error("Stack is empty, cannot peek."); } return top->data; } }; int main() { LinkStack stack; // 测试入栈操作 stack.push(10); stack.push(20); stack.push(30); // 打印栈顶元素 std::cout << "Top element: " << stack.peek() << std::endl; // 测试出栈操作 stack.pop(); std::cout << "Top element after pop: " << stack.peek() << std::endl; // 测试栈大小 std::cout << "Stack size: " << stack.getSize() << std::endl; // 清空栈 while (!stack.isEmpty()) { std::cout << "Popping: " << stack.peek() << std::endl; stack.pop(); } return 0; }