【牛客题霸】【模板】栈|栈的压入、弹出序列(上)

简介: 【牛客题霸】【模板】栈|栈的压入、弹出序列(上)

🔥前言

本专栏收录的均为牛客网的算法题目,内含链表、双指针、递归、动态规划、基本数据结构等算法思想的具体运用。牛客网不仅有大量的经典算法题目,也有大厂的面试真题,面试、找工作完全可以来这里找机会。此外,网站内的编码主题多样化,调试功能可运用性强,在这里刷题除了锻炼算法思想,同时也锻炼了根据要求自己设计输入输出的代码能力,可谓是非常注重用户体验。这么好的免费刷题网站还不快入手吗,快去注册开启算法百炼成神之路吧!(会在具体题目旁留下链接)


f87f0ef709fc421a8222cace5ea4cf88.png

fc02a69cdd224ad2a3c5fe49cf84f10d.png


1、AB1 【模板】栈

对应题目链接:算法入门-AB1


题目叙述5e66d49d68414e87a5bf89cafa83d776.png


6e7438546f4845b4b9f9361893cd732d.png



1.1、解题思路

此题第一个要求就是实现一个栈,因此切记不可直接包含stack头文件,而是自己模拟一个栈类,同时按照要求完善push、pop和top方法。

接下来注意输入描述的内容,从这里可以知道我们最多循环操作100000次,那么栈的容量就可以设置成这个数,同时栈的下标应该从-1开始。

输出描述就是三个方法的完善,通过分支语句if-else即可完成。

1.2、代码实现与解释

本题源码:

#include <iostream>
using namespace std;
class stack {
    int s[100000];
    int index = -1;
  public:
    void push(int x) {
        index++;
        s[index] = x;
    }
    void top() {
        if (index < 0)
            cout << "error" << endl;
        else
            cout << s[index]<<endl;
    }
    void pop() {
        if (index < 0)
            cout << "error" << endl;
        else
            cout << s[index--] << endl;
    }
};
int main() {
    stack s;
    int n;
    cin >> n;
    for (int i = 0; i < n; i++) {
        string op;
        cin >> op;
        if (op == "push") {
            int x;
            cin >> x;
            s.push(x);
        } else if (op == "pop") {
            s.pop();
        } else if (op == "top") {
            s.top();
        }
    }
    return 0;
}

重要代码注释:


push方法用来压栈,让下标加一然后将值赋给数组里对应的位置

top方法其实就是打印栈顶的值,就是当前下标对应的值,由于题目要求需要加判断,如果栈空,打印error,还有一个细节就是输出都是单个占一行,因此牵扯到打印语句都要加endl

pop方法在top方法的基础上让栈顶指针减一,相当于让栈顶元素出栈

主函数中自己设计的输入输出代码,大家可以自行参考


目录
相关文章
|
1月前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
164 9
|
1月前
|
存储 算法
非递归实现后序遍历时,如何避免栈溢出?
后序遍历的递归实现和非递归实现各有优缺点,在实际应用中需要根据具体的问题需求、二叉树的特点以及性能和空间的限制等因素来选择合适的实现方式。
30 1
|
19天前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
42 5
|
1月前
|
存储 算法 Java
数据结构的栈
栈作为一种简单而高效的数据结构,在计算机科学和软件开发中有着广泛的应用。通过合理地使用栈,可以有效地解决许多与数据存储和操作相关的问题。
|
1月前
|
存储 JavaScript 前端开发
执行上下文和执行栈
执行上下文是JavaScript运行代码时的环境,每个执行上下文都有自己的变量对象、作用域链和this值。执行栈用于管理函数调用,每当调用一个函数,就会在栈中添加一个新的执行上下文。
|
1月前
|
存储
系统调用处理程序在内核栈中保存了哪些上下文信息?
【10月更文挑战第29天】系统调用处理程序在内核栈中保存的这些上下文信息对于保证系统调用的正确执行和用户程序的正常恢复至关重要。通过准确地保存和恢复这些信息,操作系统能够实现用户模式和内核模式之间的无缝切换,为用户程序提供稳定、可靠的系统服务。
51 4
|
1月前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
26天前
|
算法
数据结构之购物车系统(链表和栈)
本文介绍了基于链表和栈的购物车系统的设计与实现。该系统通过命令行界面提供商品管理、购物车查看、结算等功能,支持用户便捷地管理购物清单。核心代码定义了商品、购物车商品节点和购物车的数据结构,并实现了添加、删除商品、查看购物车内容及结算等操作。算法分析显示,系统在处理小规模购物车时表现良好,但在大规模购物车操作下可能存在性能瓶颈。
42 0
|
2月前
数据结构(栈与列队)
数据结构(栈与列队)
23 1
|
2月前
【数据结构】-- 栈和队列
【数据结构】-- 栈和队列
19 0