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

C++栈数据结构实现(从零开始掌握栈的原理与代码编写)

在计算机科学中,栈(Stack)是一种非常基础且重要的数据结构。它遵循“后进先出”(LIFO, Last In First Out)的原则,就像一摞盘子:你只能从顶部拿走或放上盘子。

本教程将带你用 C++语言 从零开始实现一个完整的栈数据结构。无论你是编程新手还是想复习基础知识,都能轻松理解!

C++栈数据结构实现(从零开始掌握栈的原理与代码编写) C++栈实现 栈数据结构 C++编程教程 数据结构入门 第1张

什么是栈?

栈是一种线性数据结构,只允许在一端进行插入和删除操作,这一端称为“栈顶”(Top)。另一端称为“栈底”(Bottom),是固定的。

栈的常见操作包括:

  • push():将元素压入栈顶
  • pop():弹出栈顶元素
  • top()peek():查看栈顶元素但不删除
  • isEmpty():判断栈是否为空
  • size():返回栈中元素个数

用C++实现栈(基于数组)

我们可以使用 C++ 的数组来手动实现一个栈。下面是一个完整的、易于理解的实现:

#include <iostream>#include <stdexcept> // 用于异常处理const int MAX_SIZE = 100; // 栈的最大容量class Stack {private:    int data[MAX_SIZE]; // 存储栈元素的数组    int topIndex;       // 栈顶索引(-1 表示空栈)public:    // 构造函数    Stack() {        topIndex = -1;    }    // 判断栈是否为空    bool isEmpty() {        return topIndex == -1;    }    // 判断栈是否已满    bool isFull() {        return topIndex == MAX_SIZE - 1;    }    // 压入元素    void push(int value) {        if (isFull()) {            throw std::overflow_error("栈已满,无法压入新元素!");        }        data[++topIndex] = value;    }    // 弹出元素    int pop() {        if (isEmpty()) {            throw std::underflow_error("栈为空,无法弹出元素!");        }        return data[topIndex--];    }    // 查看栈顶元素    int peek() {        if (isEmpty()) {            throw std::underflow_error("栈为空,无栈顶元素!");        }        return data[topIndex];    }    // 获取栈大小    int size() {        return topIndex + 1;    }};

如何使用这个栈?

下面是一个简单的使用示例,演示了如何创建栈、压入和弹出元素:

int main() {    Stack s;    std::cout << "压入元素 10, 20, 30...\n";    s.push(10);    s.push(20);    s.push(30);    std::cout << "栈顶元素是: " << s.peek() << std::endl; // 输出 30    std::cout << "栈的大小: " << s.size() << std::endl;   // 输出 3    std::cout << "依次弹出元素:\n";    while (!s.isEmpty()) {        std::cout << s.pop() << " "; // 输出 30 20 10    }    std::cout << std::endl;    return 0;}

注意事项与扩展

上面的实现使用了固定大小的数组,因此有容量限制。在实际开发中,你可以:

  • 使用动态数组(如 std::vector)实现可变大小的栈
  • 使用链表实现栈,避免预设容量
  • 使用 C++ 标准库中的 std::stack(但学习手动实现有助于理解原理)

掌握 C++栈实现 是学习更复杂算法(如深度优先搜索、表达式求值等)的基础。这也是 数据结构入门 的关键一步。

总结

通过本教程,你已经学会了:

  • 栈的基本概念和操作
  • 如何用 C++ 手动实现一个基于数组的栈
  • 如何安全地处理栈满和栈空的情况

希望这篇 C++编程教程 能帮助你打下坚实的数据结构基础!继续练习,尝试用链表实现栈,或解决一些栈相关的经典问题(如括号匹配、逆波兰表达式等)。

记住:理解 栈数据结构 是迈向高级编程的重要一步!