栈在数据结构与算法中的应用

发表时间: 2023-09-13 15:28

栈是一种线性数据结构,它遵循特定的操作规则,即后进先出(LIFO,Last In First Out)。这意味着最后一个被添加到栈中的元素将是第一个被移除的元素。在计算机科学中,栈被广泛应用于各种场景,如解析表达式、后缀/中缀/前缀算术表达式、函数调用和递归等。

栈的基本操作包括:

压栈(Push):在栈顶添加一个元素。

弹栈(Pop):删除栈顶的元素并返回该元素。

查看栈顶(Peek/Top):返回栈顶的元素但不删除。

栈是否为空(Empty):检查栈中是否有元素。

栈的元素个数(Size):获取栈的元素个数。

栈的一种常见实现是使用数组。在这种情况下,压栈操作可以通过将元素添加到数组的末尾来完成,而弹栈操作可以通过删除数组的最后一个元素来完成。

另一种常见的栈实现是使用链表。在这种情况下,每个节点都包含一个数据元素和一个指向下一个节点的指针。压栈操作可以通过在链表末尾添加一个新节点来完成,而弹栈操作可以通过删除链表的最后一个节点来完成。

// stack.cpp// 编译运行// g++ -g stack.cpp -o stack && ./stack// 程序输出// Top element: 3// Stack element szie: 3// Top element after popping: 1// Stack is not empty#include <iostream>#include <stack>int main() {    std::stack<int> myStack;    myStack.push(1);    myStack.push(2);    myStack.push(3);    std::cout << "Top element: " << myStack.top() << std::endl;    std::cout << "Stack element szie: " << myStack.size() << std::endl;    myStack.pop();    myStack.pop();    std::cout << "Top element after popping: " << myStack.top() << std::endl;    if (myStack.empty()) {        std::cout << "Stack is empty" << std::endl;    } else {        std::cout << "Stack is not empty" << std::endl;    }    return 0;}