ssy/c++上机4.cpp
2024-08-05 23:12:46 +08:00

93 lines
1.8 KiB
C++

#include <iostream>
// 节点结构
template <typename T>
struct Node {
T data;
Node* next;
Node(const T& data) : data(data), next(nullptr) {}
};
// 链栈类模板
template <typename T>
class LinkStack {
private:
Node<T>* 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<T>* newNode = new Node<T>(data);
newNode->next = top;
top = newNode;
++size;
}
// 出栈操作
void pop() {
if (isEmpty()) {
std::cout << "Stack is empty, cannot pop.\n";
return;
}
Node<T>* 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<int> 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;
}