当前位置:首页 > C++ > 正文

C++链式栈实现(手把手教你用C++构建链式栈数据结构)

在学习数据结构时,栈(Stack)是一种非常基础且重要的线性结构。它遵循“后进先出”(LIFO)原则。栈有两种常见实现方式:顺序栈(基于数组)和链式栈(基于链表)。本文将详细讲解如何使用C++语言链式栈实现,即使你是编程小白,也能轻松理解并掌握!

什么是链式栈?

链式栈是使用单向链表来实现的栈结构。每个节点包含两个部分:数据域(存储数据)和指针域(指向下一个节点)。栈顶始终指向链表的第一个节点,所有入栈和出栈操作都在栈顶进行。

C++链式栈实现(手把手教你用C++构建链式栈数据结构) C++链式栈实现 链式栈C++代码 数据结构链式栈 C++栈操作教程 第1张

为什么选择链式栈?

  • 动态内存分配,无需预先指定大小;
  • 避免顺序栈可能出现的“溢出”问题;
  • 插入/删除操作效率高(O(1) 时间复杂度)。

C++链式栈实现步骤

我们将通过以下步骤完成一个完整的链式栈C++代码实现:

  1. 定义栈节点结构;
  2. 定义链式栈类;
  3. 实现基本操作:入栈(push)、出栈(pop)、查看栈顶(top)、判断是否为空(empty)等。

1. 定义节点结构

首先,我们创建一个结构体 Node,用于表示链表中的每个节点:

struct Node {    int data;           // 数据域    Node* next;         // 指针域,指向下一个节点    // 构造函数    Node(int val) : data(val), next(nullptr) {}};  

2. 定义链式栈类

接下来,我们定义 LinkedStack 类,并声明其成员变量和方法:

class LinkedStack {private:    Node* topNode;      // 指向栈顶的指针public:    LinkedStack();                      // 构造函数    ~LinkedStack();                     // 析构函数    void push(int value);               // 入栈    void pop();                         // 出栈    int top();                          // 获取栈顶元素    bool empty();                       // 判断栈是否为空    void display();                     // 打印栈中所有元素(辅助调试)};  

3. 实现成员函数

现在我们逐个实现上述方法。注意内存管理和边界条件处理:

// 构造函数:初始化栈顶为空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;}  

4. 测试代码

最后,我们编写一个简单的 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,但手动实现有助于深入理解底层原理。