在学习数据结构时,栈(Stack)是一种非常基础且重要的线性结构。它遵循“后进先出”(LIFO)原则。栈有两种常见实现方式:顺序栈(基于数组)和链式栈(基于链表)。本文将详细讲解如何使用C++语言链式栈实现,即使你是编程小白,也能轻松理解并掌握!
链式栈是使用单向链表来实现的栈结构。每个节点包含两个部分:数据域(存储数据)和指针域(指向下一个节点)。栈顶始终指向链表的第一个节点,所有入栈和出栈操作都在栈顶进行。
我们将通过以下步骤完成一个完整的链式栈C++代码实现:
首先,我们创建一个结构体 Node,用于表示链表中的每个节点:
struct Node { int data; // 数据域 Node* next; // 指针域,指向下一个节点 // 构造函数 Node(int val) : data(val), next(nullptr) {}}; 接下来,我们定义 LinkedStack 类,并声明其成员变量和方法:
class LinkedStack {private: Node* topNode; // 指向栈顶的指针public: LinkedStack(); // 构造函数 ~LinkedStack(); // 析构函数 void push(int value); // 入栈 void pop(); // 出栈 int top(); // 获取栈顶元素 bool empty(); // 判断栈是否为空 void display(); // 打印栈中所有元素(辅助调试)}; 现在我们逐个实现上述方法。注意内存管理和边界条件处理:
// 构造函数:初始化栈顶为空LinkedStack::LinkedStack() { topNode = nullptr;}// 析构函数:释放所有节点内存LinkedStack::~LinkedStack() { while (!empty()) { pop(); }}// 入栈操作void LinkedStack::push(int value) { Node* newNode = new Node(value); newNode->next = topNode; topNode = newNode;}// 出栈操作void LinkedStack::pop() { if (empty()) { std::cout << "栈为空,无法出栈!" << std::endl; return; } Node* temp = topNode; topNode = topNode->next; delete temp;}// 获取栈顶元素int LinkedStack::top() { if (empty()) { throw std::runtime_error("栈为空!"); } return topNode->data;}// 判断栈是否为空bool LinkedStack::empty() { return topNode == nullptr;}// 打印栈中所有元素(从栈顶到栈底)void LinkedStack::display() { if (empty()) { std::cout << "栈为空" << std::endl; return; } Node* current = topNode; std::cout << "栈内容(栈顶→栈底): "; while (current != nullptr) { std::cout << current->data << " "; current = current->next; } std::cout << std::endl;} 最后,我们编写一个简单的 main 函数来测试我们的数据结构链式栈:
#include <iostream>#include <stdexcept>// (此处省略上面定义的 Node 和 LinkedStack 代码)int main() { LinkedStack stack; std::cout << "=== C++栈操作教程 ===" << std::endl; stack.push(10); stack.push(20); stack.push(30); stack.display(); // 输出: 30 20 10 std::cout << "栈顶元素: " << stack.top() << std::endl; // 输出: 30 stack.pop(); stack.display(); // 输出: 20 10 std::cout << "栈是否为空? " << (stack.empty() ? "是" : "否") << std::endl; // 输出: 否 return 0;} 通过本教程,你已经掌握了如何用C++语言链式栈实现一个功能完整的栈数据结构。链式栈具有动态扩展、高效操作的优点,非常适合在不确定数据规模的场景中使用。希望这篇C++栈操作教程能帮助你夯实数据结构基础!
记住四个核心关键词:C++链式栈实现、链式栈C++代码、数据结构链式栈、C++栈操作教程。它们不仅是学习重点,也是面试常考点哦!
提示:实际开发中建议使用 C++ 标准库中的 std::stack,但手动实现有助于深入理解底层原理。
本文由主机测评网于2025-12-17发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025128939.html