数据结构篇3—《龙门客“栈”》

在这里插入图片描述

文章目录

  • 🚩前言
    • 1、栈的概念
    • 2、栈的实现框架
    • 3、栈的代码实现
      • 3.1、栈的初始化和销毁
      • 3.2、入栈\出栈\返回栈顶元素\元素个数\判空
      • 3.3、栈定义注意事项
    • 4、栈的应用实例——《括号匹配问题》

🚩前言

前面记录了关于顺序表和链表的数据结构,这一篇文章就来说一下“栈”这一个数据结构。当然不是什么龙门客栈了哈哈。接下来就来实现一下栈这个结构吧,并用实例来展示栈的应用!✌

1、栈的概念

栈 :一种特殊的线性表,在存储数据的时候和顺序表以及单链表有所区别。我们通过图来展示:
在这里插入图片描述

2、栈的实现框架

在这里插入图片描述

3、栈的代码实现

该栈的实现是用顺序表的结构,模拟实现栈。

3.1、栈的初始化和销毁

void STInit(ST* pst)
{assert(pst);pst->a = NULL;//此处可以给空间,也可以先不给,//在插入的时候再给。pst->capacity = 0;pst->size = 0;
}void STDestory(ST* pst)
{assert(pst);free(pst->a);pst->a = NULL;pst->capacity = 0;pst->size = 0;
}

3.2、入栈\出栈\返回栈顶元素\元素个数\判空

void STPush(ST* pst, STDataType data)
{assert(pst);if (pst->top == pst->capacity){int NewCapacity = pst->capacity == 0 ? 4 : pst->capacity * 2;STDataType* tmp = (STDataType*)realloc(pst->a,NewCapacity*sizeof(STDataType));if (tmp == NULL){perror("STPush::realloc fail!");return;}else{pst->a = tmp;pst->capacity = NewCapacity;}}pst->a[pst->top++]=data;
}void STPop(ST* pst)
{assert(pst && pst->top > 0);pst->top--;
}STDataType STTop(ST* pst)
{assert(pst&&pst->top);return pst->a[pst->top - 1];
}int STSize(ST st)
{assert(&st);return st.top;
}bool STEmpty(ST st)
{assert(&st);return st.top == 0;
}

3.3、栈定义注意事项

①对于top初值的大小:
在这里插入图片描述

4、栈的应用实例——《括号匹配问题》

oj括号匹配问题

思路:
①首先括号匹配需要考虑两个点:数量上匹配和方向上匹配(左括号要匹配右括号)。
②利用栈结构实现该题:只要是左括号(全部类型的),就入栈;如果遇到右括号,则出栈顶元素(也就是和栈顶左括号进行匹配)。在这我们直接判断不匹配是情况,就是只判断不匹配情况,匹配的情况不用管。
代码如下:

bool isValid(char* s) {ST st;STInit(&st);while(*s!='\0'){if((*s=='(') || (*s=='{') || (*s=='[')){STPush(&st,*s);}else{if(STEmpty(&st)){return false;STDestory(&st);}DataType ret=GetTopElement(&st);STPop(&st);if((ret == '(' && *s != ')')||(ret == '{' && *s != '}')||(ret == '[' && *s != ']')){return false;}}s++;}return STEmpty(&st);STDestory(&st);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/12989.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CF1965A】Everything Nim

题目链接 前置trick&#xff1a; 使用vector去重&#xff1a; vector<int> a(n);for(int i0;i<n;i) cin>>a[i];sort(a.begin(),a.end());a.erase(unique(a.begin(),a.end()),a.end());na.size();题意&#xff1a; 有 n n n堆石子&#xff0c;第 i i i堆有 a i a…

【企业宣传片】拍摄思维提升,专业影视质感核心揭密,一课搞定

课程下载&#xff1a;【企业宣传片】拍摄-课程网盘链接提取码下载.txt资源-CSDN文库 更多资源下载&#xff1a;关注我。 课程介绍 大量案例分析宣传片拍摄的痛点要点 根据案例告诉你解决方案&#xff0c;讲透概念 改变你对企业宣传片的思维层级与认知 归纳总结对比不同案…

C++语法|类直接包含与自身类型相同的成员变量?

在C中&#xff0c;一个类不能直接包含与自身类型相同的成员变量。这是因为类的大小需要在编译时确定&#xff0c;而一个包含自身类型的成员变量会导致递归定义&#xff0c;从而无法确定类的大小。 文章目录 示例代码&#xff08;非法定义&#xff09;解决办法1.使用指针2.使用智…

k8s 二进制安装 优化架构之 部署负载均衡,加入master02

目录 一 实验环境 二 部署 CoreDNS 1&#xff0c;所有node加载coredns.tar 镜像 2&#xff0c;在 master01 节点部署 CoreDNS 3&#xff0c; DNS 解析测试 4&#xff0c; 报错分析 5&#xff0c;重新 DNS 解析测试 三 master02 节点部署 1&#xff0…

AI学习指南数学工具篇-PCA的应用场景

AI学习指南数学工具篇-PCA的应用场景 在人工智能领域&#xff0c;数据处理是非常重要的一环。对于大量高维数据&#xff0c;我们往往需要进行数据降维来减少计算复杂度&#xff0c;同时利用可视化工具对数据进行分析和理解。主成分分析&#xff08;Principal Component Analys…

C++ 利用标准库多字节转宽字节字符

在 C/C 之中&#xff0c;通常建议使用&#xff1a;mbstowcs &#xff08;C语言函数库&#xff09;来实现多字节字符转宽字节字符&#xff0c;这是因为如果使用。 std::wstring_convert<std::codecvt_utf8<wchar_t>> 模板来实现&#xff0c;它可能导致程序崩溃的风险…

【利用数组处理批量数据-谭浩强配套】(适合专升本、考研)

无偿分享学习资料&#xff0c;需要的小伙伴评论区或私信dd。。。 无偿分享学习资料&#xff0c;需要的小伙伴评论区或私信dd。。。 无偿分享学习资料&#xff0c;需要的小伙伴评论区或私信dd。。。 完整资料如下&#xff1a;纯干货、纯干货、纯干货&#xff01;&#xff01;…

点云成图原理

点成图&#xff08;Point Cloud&#xff09;是指由一组离散的点构成的图形&#xff0c;它们在空间中没有任何连接关系。点成图通常是由激光雷达、相机或其他传感器获取的三维数据&#xff0c;用于表示现实世界中的物体或场景。 三角成图&#xff08;Triangulation&#xff09;…

element ui Tree树形控件

lazy 是否懒加载子节点&#xff0c;需与 load 方法结合使用 boolean 默认为falseload 加载子树数据的方法&#xff0c;仅当 lazy 属性为true 时生效 function(node, resolve)使用懒加载load不需要再使用data&#xff0c;利用resolve返回值即可注意&#xff1a;第一层的数据要写…

PMR-440N7Q韩国施耐德三和相序继电器EOCR-PMR

韩国施耐德三和EOCR继电器PMR-440N7Q PMR-440-N 直流电动机保护器:DCL、DOCR-S/H 欠电流继电器:EUCR-3C 交流电压继电器:EOVR、EVR-PD、EVR-FD、EUVR 韩国三和EOCR电动机保护器:EOCR-SS、EOCR-SS1/SS2、EOCR-AR、EOCR-ST、EOCR-SP、EOCR-SP1/SP2、EOCR-SE、EOCR-SE2/SE PMR-44…

GIT基础02 多机器协作等命令

前言 首先我们知道git给我们提供了分支管理的功能 我们一般使用master分支作为线上环境,master分支一般是一个稳定的分支 我们通常是会创建一个其他分支进行开发,这样不会影响线上的机器运行 如果没有git提供这样的分支功能,就无法做到这一套了 指令学习 假设软件出现问题咋办…

LBSS138LT1G 丝印J1 SOT-23 N沟道 50V/200mA 贴片MOSFET

LBSS138LT1G的应用领域广泛&#xff0c;主要因为它是一种N沟道金属氧化物半导体场效应晶体管&#xff08;MOSFET&#xff09;&#xff0c;具有低电荷、快速开关速度和高阻断特性。以下是一些典型的应用领域&#xff1a; 1. 消费电子产品&#xff1a;LBSS138LT1G常用于电视、音响…

debian apt 更改阿里源

1. 备份文件 cp /etc/apt/sources.list /etc/apt/sources.list.bak 2. 更改 sources.list文件内容为&#xff1a; deb http://mirrors.aliyun.com/debian/ buster main non-free contrib deb-src http://mirrors.aliyun.com/debian/ buster main non-free contrib deb htt…

QT状态机1-三态循环状态机

#include "MainWindow.h" #include "ui_MainWindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)

【C -> Cpp】由C迈向Cpp (6):静态、友元和内部类

标题&#xff1a;【C -&#xff1e; Cpp】由C迈向Cpp &#xff08;6&#xff09;&#xff1a;静态、友元和内部类 水墨不写bug &#xff08;图片来源于网络&#xff09; 目录 &#xff08;一&#xff09;静态成员 &#xff08;二&#xff09;友元 &#xff08;三&#xff09…

生产性服务业与生活性服务业如何区分

服务业的兴旺发达是现代经济的显著特征&#xff0c;是经济社会发展的必然趋势&#xff0c;是衡量经济发展现代化、国际化、高端化的重要标志。生产性服务业和生活性服务业是服务业的重要组成部分&#xff0c;是当前中国经济最具活力的产业&#xff0c;也是未来经济发展最具潜力…

2024OD机试卷-解密犯罪时间 (java\python\c++)

题目:解密犯罪时间 题目描述 警察在侦破一个案件时,得到了线人给出的可能犯罪时间,形如 “HH:MM” 表示的时刻。 根据警察和线人的约定,为了隐蔽,该时间是修改过的,解密规则为:利用当前出现过的数字,构造下一个距离 当前时间 最近的时刻,则该时间为可能的犯罪时间。…

为pytorch前向和反向的Tensor生成描述性统计

为pytorch前向和反向的Tensor生成描述性统计 代码 在调试Megatron-DeepSpeed的精度时&#xff0c;我们希望对比每一层前向和反向传播的输入输出误差。然而&#xff0c;由于数据量过大&#xff0c;直接保存所有数据不太现实。因此&#xff0c;我们生成了输入输出tensor的描述性统…

有哪些好用的3dMax大神插件?

有哪些好用的3dMax大神插件&#xff1f; Mesh Insert 3DMAX网格插入插件Mesh Insert&#xff0c;在选择的面上安门窗、打螺丝、挖洞、插入眼耳口鼻及其它网格模型等可以分分钟搞定&#xff01;它通过将面选择替换为库中的资源来加快建模过程。非常适合硬网格和有机建模&#xf…

Go 一个类型转换工具包strconv包

Go 语言的 strconv 包提供了用于基本数据类型之间转换的函数&#xff0c;包括字符串到其他基本类型的转换&#xff0c;以及其他基本类型到字符串的转换。 字符串转换为基本数据类型 strconv.Atoi&#xff1a;将字符串转换为 intstrconv.ParseBool&#xff1a;将字符串转换为 b…