数组模拟栈

简介: 文章目录前言一、关于栈二、栈的操作1.数组模拟栈必备属性2.把x插入到栈顶3.把栈顶元素弹出4.判断栈是否为空5.查询栈顶元素三、例题,代码AcWing 828. 模拟栈AC代码四、时间复杂度

文章目录

• 前言

• 一、关于栈

• 二、栈的操作

• 1.数组模拟栈必备属性

• 2.把x插入到栈顶

• 3.把栈顶元素弹出

• 4.判断栈是否为空

• 5.查询栈顶元素

• 三、例题,代码

• AcWing 828. 模拟栈

• AC代码

• 四、时间复杂度

前言

复习acwing算法基础课的内容,本篇为讲解基础算法:用数组模拟栈,关于时间复杂度:目前博主不太会计算,先鸽了,日后一定补上


一、关于栈

在C++中,STL已经帮助我们实现了栈,详见:STL—stack,本篇博客中,讲解如何用数组去模拟栈,实现栈的一些功能.


二、栈的操作

1.数组模拟栈必备属性

int st[N];          //st数组中存储的就是栈的元素
int tt;             //tt初始值为0,代表栈中没有任何一个元素

2.把x插入到栈顶

st[ ++ tt ] = x;         //先把tt往后移动一个位置,然后把x赋值到st数组中

3.把栈顶元素弹出

tt代表的就是栈顶的元素坐标,所以我们只需要

tt --;

4.判断栈是否为空

if (tt == 0) printf("栈为空");
else printf("栈不为空");

5.查询栈顶元素

printf("%d", st[tt]);         //tt代表的就是栈顶元素

三、例题,代码

AcWing 828. 模拟栈

本题链接AcWing 828. 模拟栈

本博客给出本题截图:

image.png

image.png

AC代码

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int N = 100010;
int st[N], tt;
int main()
{
    int n;
    scanf("%d", &n);
    while (n -- )
    {
        string a;
        cin >> a;
        if (a == "push")
        {
            int x;
            scanf("%d", &x);
            st[ ++ tt ] = x;
        }
        else if (a == "pop") tt --;
        else if (a == "empty") 
        {
            if (tt == 0) printf("YES\n");
            else printf("NO\n");
        }
        else printf("%d\n", st[tt]);
    }
    return 0;
}

四、时间复杂度

关于数组模拟栈的各操作时间复杂度以及证明,后续会给出详细的说明以及证明过程,目前先鸽了。



目录
相关文章
|
15天前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
90 9
|
6天前
|
存储 算法
非递归实现后序遍历时,如何避免栈溢出?
后序遍历的递归实现和非递归实现各有优缺点,在实际应用中需要根据具体的问题需求、二叉树的特点以及性能和空间的限制等因素来选择合适的实现方式。
15 1
|
9天前
|
存储 算法 Java
数据结构的栈
栈作为一种简单而高效的数据结构,在计算机科学和软件开发中有着广泛的应用。通过合理地使用栈,可以有效地解决许多与数据存储和操作相关的问题。
|
12天前
|
存储 JavaScript 前端开发
执行上下文和执行栈
执行上下文是JavaScript运行代码时的环境,每个执行上下文都有自己的变量对象、作用域链和this值。执行栈用于管理函数调用,每当调用一个函数,就会在栈中添加一个新的执行上下文。
|
14天前
|
存储
系统调用处理程序在内核栈中保存了哪些上下文信息?
【10月更文挑战第29天】系统调用处理程序在内核栈中保存的这些上下文信息对于保证系统调用的正确执行和用户程序的正常恢复至关重要。通过准确地保存和恢复这些信息,操作系统能够实现用户模式和内核模式之间的无缝切换,为用户程序提供稳定、可靠的系统服务。
42 4
|
18天前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
1月前
数据结构(栈与列队)
数据结构(栈与列队)
17 1
|
1月前
|
存储 JavaScript 前端开发
为什么基础数据类型存放在栈中,而引用数据类型存放在堆中?
为什么基础数据类型存放在栈中,而引用数据类型存放在堆中?
68 1
|
1月前
【数据结构】-- 栈和队列
【数据结构】-- 栈和队列
16 0
|
1月前
探索顺序结构:栈的实现方式
探索顺序结构:栈的实现方式