【数据结构基础】栈的基础应用

要弄明白什么是栈,就需要举一个生活化的例子。

假如有一个狭小的胡同,这个胡同一端开口,另一端封闭。有许多车在里面停着,这时往胡同里面停放车辆,先停的会靠近胡同内侧,后停车的会位于胡同入口。

【如图】

这时若想把靠后的车辆开出来,就需要先把最靠近入口的车开出来。即按照和停车顺序相反的顺序来取车。

【如图】

栈作为一种线性数据结构,特点为先入后出。最早进入的元素为栈底,最后进入的元素为栈顶。而由于是线性的,所以用数组和链表均可实现。

下面来讲栈的基本操作

1,入栈(push)

入栈操作就是把新元素放入栈中,只允许从栈顶一侧放入元素,新的元素会变为新的栈顶。

【如图】

2,出栈(pop)

出栈就是把栈顶从栈中弹出,而栈顶的后一位元素会随即变为新的栈顶。

【如图】

下列代码展示了c++中入栈和出栈的操作。 c++中提供了stack,使我们可以用它完成非常方便的操作(也是算法比赛必备知识了)

perl 复制代码
​
#include <iostream>
#include <stack>
using namespace std;
​
​
int main() {
    int size;  // 定义一个整型变量,用于存储栈的大小
    cout << "请输入栈的大小: ";  // 提示用户输入栈的大小
    cin >> size;  // 从标准输入读取栈的大小
​
//下列框内代码可省略
////////////////////////////////////////////////////////////////////////////////////////////
    if (size <= 0) {  // 检查栈的大小是否为正数
        cerr << "栈的大小必须为正数" << endl;  // 如果栈的大小不是正数,输出错误信息
        return 1;  // 退出程序,返回错误码1
    }
////////////////////////////////////////////////////////////////////////////////////////////
​
​
    stack<char> charStack;  // 定义一个字符栈
​
    // 输入字符
    cout << "请输入 " << size << " 个字符:\n";  // 提示用户输入指定数量的字符
    for (int i = 0; i < size; ++i) {  // 循环读取指定数量的字符
        char c;  // 定义一个字符变量
        cin >> c;  // 从标准输入读取一个字符
        charStack.push(c);  // 将读取的字符压入栈中
    }
​
    // 弹出并打印字符
    cout << "从栈中弹出的字符为:\n";  // 提示用户即将输出从栈中弹出的字符
    while (!charStack.empty()) {  // 当栈不为空时,继续循环
        cout << charStack.top() << ' ';  // 输出栈顶的字符,并在字符后加一个空格
        charStack.pop();  // 弹出栈顶的字符
    }
    cout << endl;  
​
    return 0;  
}
​

另外,由于入栈和出栈只影响最后一个元素,时间复杂度均为O(1),是十分高效的操作。

同时由于它先入后出的特性,非常适合用于历史回溯的功能。

相关推荐
星诺算法备案10 分钟前
读懂大模型备案流程,开启技术安全应用新征程
人工智能·算法·推荐算法·备案
Loo国昌14 分钟前
大型语言模型推理范式演进:从提示工程到思维算法
人工智能·算法·语言模型·自然语言处理
代码游侠29 分钟前
学习笔记——线程控制 - 互斥与同步
linux·运维·笔记·学习·算法
yaoh.wang33 分钟前
力扣(LeetCode) 66: 加一 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·跳槽
聆风吟º39 分钟前
【数据结构手札】顺序表实战指南(一):线性表定义 | 顺序表定义
数据结构·顺序表·线性表
wanderist.1 小时前
2025年蓝桥杯省赛C++大学A组
c++·算法·蓝桥杯
啊董dong1 小时前
noi-2025年12月16号作业
数据结构·c++·算法·noi
white-persist1 小时前
【攻防世界】reverse | simple-check-100 详细题解 WP
c语言·开发语言·汇编·数据结构·c++·python·算法
长安er1 小时前
LeetCode 01 背包 & 完全背包 题型总结
数据结构·算法·leetcode·动态规划·背包问题
小南家的青蛙1 小时前
LeetCode第2658题 - 网格图中鱼的最大数目
算法·leetcode·职场和发展