链式栈通过链表实现LIFO,核心操作push、pop、peek时间复杂度均为O(1),动态扩容避免容量限制,需注意析构时释放内存防止泄漏。

在C++中实现链式栈,核心是使用链表结构来模拟栈的“后进先出”(LIFO)特性。相比顺序栈(基于数组),链式栈动态分配内存,避免了容量限制,更加灵活。
链式栈由一系列节点组成,每个节点包含数据和指向下一个节点的指针。栈顶指针始终指向当前最上面的元素。
定义节点结构和栈类:
struct Node {
int data;
Node* next;
Node(int val) : data(val), next(nullptr) {}
};
<p>class LinkedStack {
private:
Node* top; // 栈顶指针
int size; // 当前元素个数</p><p>public:
LinkedStack() : top(nullptr), size(0) {}
~LinkedStack();</p><pre class='brush:php;toolbar:false;'>void push(int val);
void pop();
int peek() const;
bool isEmpty() const;
int getSize() const;};
立即学习“C++免费学习笔记(深入)”;
链式栈的关键操作包括入栈、出栈、查看栈顶等,时间复杂度均为 O(1)。
入栈(push):创建新节点,将其next指向原栈顶,再更新top指针。
void LinkedStack::push(int val) {
Node* newNode = new Node(val);
newNode->next = top;
top = newNode;
size++;
}
出栈(pop):检查是否为空,删除栈顶节点,top指向下一个节点。
void LinkedStack::pop() {
if (isEmpty()) {
std::cout << "栈为空,无法出栈!\n";
return;
}
Node* temp = top;
top = top->next;
delete temp;
size--;
}
获取栈顶元素(peek):返回top所指节点的数据,不修改栈。
int LinkedStack::peek() const {
if (isEmpty()) {
throw std::runtime_error("栈为空!");
}
return top->data;
}
判空与大小:判断top是否为nullptr,size返回当前元素数量。
bool LinkedStack::isEmpty() const {
return top == nullptr;
}
<p>int LinkedStack::getSize() const {
return size;
}</p>由于使用了动态内存,需要手动释放所有节点,防止内存泄漏。
LinkedStack::~LinkedStack() {
while (top != nullptr) {
Node* temp = top;
top = top->next;
delete temp;
}
}
使用时可结合try-catch处理异常,比如访问空栈。整个实现简洁高效,适合不确定数据量或频繁增删的场景。基本上就这些。
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号