C++知识点总结(24):数据结构与栈

数据结构与栈

  • 一、概念
    • 1. 数据
    • 2. 数据结构
    • 3. 数据结构分类
  • 二、栈
    • 1. 栈
    • 2. 相关概念
      • 2.1 入栈
      • 2.2 出栈
      • 2.3 栈的特点
      • 2.4 栈顶
      • 2.5 栈底
      • 2.6 栈顶元素
      • 2.7 栈底元素
  • 三、数组模拟栈
    • 1. 初始化空栈
    • 2. 入栈
    • 3. 出栈
    • 4. 获取栈顶元素
    • 5. 判断栈是否为空
    • 6. 获取栈内元素个数
  • 四、栈的运用
    • 1. 括号的匹配
      • 1.1 审题
      • 1.2 参考答案
    • 2. 括号的匹配 2.0
      • 2.1 审题
      • 2.2 参考答案
    • 3. 括号的匹配 3.0
      • 3.1 审题
      • 3.2 参考答案

一、概念

1. 数据

数据就是电脑可以存储的东西,例如一段文字、图片、视频、音频等等。
计算机系统中,各种字母、数字符号的组合、语音、图形、图像等,统称为数据。
计算机科学中,数据是指所有能输入到计算机并被计算机程序处理的符号总称。

2. 数据结构

数据结构是计算机存储、组织数据的一个方式,是指相互之间存在一种,或多种特定关系的数据元素的集合。

3. 数据结构分类

数据结构
逻辑结构
非线性结构
集合结构
同属一个集合别无其他关系
树状结构
一对多
图状结构
多对多
线性结构
一对一
物理结构
顺序结构
链式结构
单链表
双链表
循环链表
索引结构
不涉及
散列结构

二、栈

1. 栈

栈是只能在某一端插入和删除的特殊线性表,进行删除和插入的一端称作栈顶,另一端称作栈底。

2. 相关概念

2.1 入栈

又叫压入,把数据装入栈

2.2 出栈

又叫弹出、弹栈,把数据从栈取出

2.3 栈的特点

先进后出,后进先出

2.4 栈顶

允许进出的一端

2.5 栈底

不允许进出的一端

2.6 栈顶元素

最上方的元素,最后入栈的元素

2.7 栈底元素

最下方的元素,最先入栈的元素

三、数组模拟栈

1. 初始化空栈

一个栈可以用定义长度为 n + 1 n+1 n+1 的数组 s [ ] s[] s[] 来表示,该栈存储 n n n 个元素,然后设置指针指向栈顶元素。

const int n = 100;
数据类型 s[n+1];
int top = 0;

2. 入栈

void push(数据类型 x)
{if (top < n) // 如果栈未满{s[++top] = x;}// 上溢处理...
}

3. 出栈

void pop()
{if (top > 0) // 如果不是空栈{top--;}// 下溢处理...
}

4. 获取栈顶元素

数据类型 getTop()
{return s[top];
}

5. 判断栈是否为空

bool isEmpty()
{return (top == 0); // top = 0 时是空栈
}

6. 获取栈内元素个数

int sizeStack()
{return top;
}

四、栈的运用

1. 括号的匹配

1.1 审题

题目描述

假设一个表达式有英文字母(小写)、运算符( + + + − - × \times × ÷ \div ÷)和左右小(圆)括号构成,以“ @ @ @”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”;否则返回“NO”。假设表达式长度小于 255 255 255,左圆括号少于 100 100 100 个。

输入描述

包括一行数据,即表达式
输入文件为 bracket.in

输出描述

包括一行,即“YES”“NO”
输出文件为 bracket.out

样例1

输入

2*(x+y)/((1-x)*2)@

输出

YES

1.2 参考答案

#include <iostream>
#include <cstdio>
using namespace std;char s[105];
char c;
int top;int main() 
{freopen("bracket.in", "r", stdin);freopen("bracket.out", "w", stdout);while (cin >> c){if (c == '@'){break;}if (c != '(' && c != ')'){continue;}if (c == '('){s[++top] = c;}else{if (top == 0){cout << "NO" << endl;return 0;}top--;}}if (top == 0){cout << "YES";}else{cout << "NO";}fclose(stdin);fclose(stdout);return 0;
}

2. 括号的匹配 2.0

2.1 审题

题目描述

假设一个表达式有英文字母(小写)、运算符( + + + − - × \times × ÷ \div ÷)和左右小、中(圆)括号构成,以“ @ @ @”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”;否则返回“NO”。如果中括号在小括号内,是不合法的。假设表达式长度小于 255 255 255,左圆括号少于 100 100 100 个。

输入描述

包括一行数据,即表达式
输入文件为 bracket.in

输出描述

包括一行,即“YES”“NO”
输出文件为 bracket.out

样例1

输入

2*(x+y)/([1-x])*2)@

输出

NO

2.2 参考答案

#include <iostream>
#include <cstdio>
using namespace std;char s[105];
char c;
int top;int main() 
{freopen("bracket.in", "r", stdin);freopen("bracket.out", "w", stdout);while (cin >> c){if (c == '@'){break;}if (c == '('){s[++top] = c;}else if (c == '['){if (s[top] == '('){cout << "NO";return 0;}else{s[++top] = c;}}else if (c == ')'){if (s[top] == '('){top--;}else{cout << "NO";return 0;}}else if (c == ']'){if (s[top] == '['){top--;}else{cout << "NO";return 0;}}}if (top == 0){cout << "YES";}else{cout << "NO";}fclose(stdin);fclose(stdout);return 0;
}

3. 括号的匹配 3.0

3.1 审题

题目描述

假设一个表达式有英文字母(小写)、运算符( + + + − - × \times × ÷ \div ÷)和左右小、中、大、尖括号构成,以“ @ @ @”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”;否则返回“NO”。合法的括号:{[(<>)]}。假设表达式长度小于 255 255 255,左圆括号少于 100 100 100 个。

输入描述

包括一行数据,即表达式
输入文件为 bracket.in

输出描述

包括一行,即“YES”“NO”
输出文件为 bracket.out

样例1

输入

2*(x+y)/([1-x])*2)@

输出

NO

3.2 参考答案

#include <iostream>
#include <cstdio>
using namespace std;char s[105];
char c;
int top;int main() 
{freopen("bracket.in", "r", stdin);freopen("bracket.out", "w", stdout);while (cin >> c){if (c == '@'){break;}if (c == '<'){s[++top] = c;}else if (c == '('){if (s[top] == '<'){cout << "NO";return 0;}else{s[++top] = c;}}else if (c == '['){if (s[top] == '(' || s[top] == '<'){cout << "NO";return 0;}else{s[++top] = c;}}else if (c == '{'){if (s[top] == '(' || s[top] == '[' || s[top] == '<'){cout << "NO";return 0;}else{s[++top] = c;}}else if (c == '>'){if (s[top] == '<'){top--;}else{cout << "NO";return 0;}}else if (c == ')'){if (s[top] == '('){top--;}else{cout << "NO";return 0;}}else if (c == ']'){if (s[top] == '['){top--;}else{cout << "NO";return 0;}}else if (c == '}'){if (s[top] == '{'){top--;}else{cout << "NO";return 0;}}}if (top == 0){cout << "YES";}else{cout << "NO";}fclose(stdin);fclose(stdout);return 0;
}

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

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

相关文章

[java入门到精通] 11 泛型,数据结构,List,Set

今日目标 泛型使用 数据结构 List Set 1 泛型 1.1 泛型的介绍 泛型是一种类型参数&#xff0c;专门用来保存类型用的 最早接触泛型是在ArrayList&#xff0c;这个E就是所谓的泛型了。使用ArrayList时&#xff0c;只要给E指定某一个类型&#xff0c;里面所有用到泛型的地…

「连载」边缘计算(二十八)03-08:边缘部分源码(源码分析篇)

&#xff08;接上篇&#xff09; eventbus的具体逻辑剖析 从eventbus的启动函数切入分析具体逻辑&#xff0c;具体如下所示。 KubeEdge/edge/pkg/eventbus/event_bus.go func (eb *eventbus) Start(c *context.Context) { // no need to call TopicInit now, we have fixed …

公众号IP白名单已添加服务器IP 122.88... 依然给出 40164 错误

公众号的IP白名单已添加 122.88... 依然给出 40164 错误。 {"errcode":40164,"errmsg":"invalid ip 122.88... ipv6 ::ffff:122.88..., not in whitelist rid: 65e85a07-458dfc0d-16003e03"} 解决方案&#xff1a; 一、检查 AppID 是否正确&…

STM32基本定时功能

1、定时器就是计数器。 2、怎么计数&#xff1f; 3、我们需要有一恒定频率的方波信号&#xff0c;再加上一个寄存器。 4、比如每来一个上升沿信号&#xff0c;寄存器值加1&#xff0c;就可以完成计数。 5、假设方波频率是100Hz&#xff0c;也就是1秒100个脉冲。…

ElasticSearch 模糊查询

前缀搜索 # 前缀搜索 注意&#xff1a; 前缀搜索匹配的是trem,而不是filed&#xff0c;倒排索引的分词 性能比较差&#xff0c;没有缓存 搜索时尽量把前缀词设置长一点 GET /product/_search {"query": {"prefix": {"name": {"value"…

【学习】DLA (Deep Layer Aggregation)

本研究是有由UC Berkeley的Trevor Darrell组发表于2018年CVPR。因为&#xff0c;工作中应用到CenterNet&#xff0c;文章中使用了DLA作为backbone&#xff0c;能够以较高的速度完成推理并维持较高的AP。 DLA文章&#xff1a;论文 DLA 在实际操作中&#xff0c;常常将高级特征…

机器学习-pytorch1(持续更新)

上一节我们学习了机器学习的线性模型和非线性模型的机器学习基础知识&#xff0c;这一节主要将公式变为代码。 代码编写网站&#xff1a;https://colab.research.google.com/drive 学习课程链接&#xff1a;ML 2022 Spring 1、Load Data&#xff08;读取数据&#xff09; 这…

比较字符串

给定程序函数fun的功能是&#xff1a;比较两个字符串&#xff0c;将长的那个字符串的首地址作为函数值返回。 #include <stdio.h> /**********found**********/ char* fun(char *s, char *t) {int s10, t10;char *ss, *tt;sss;ttt; while(*ss){s1;/**********found****…

学习Java的第六天

一、变量 1、变量的定义 在程序执行的过程中变量的值会发生变化&#xff0c;直白来说就是用来存储可变化的数据。从本质上讲&#xff0c;变量其实指的是内存中的一小块存储空间&#xff0c;空间位置是确定的&#xff0c;但是里面放置的值不确定。比如屋子里有多个鞋柜&#x…

启发式算法:禁忌搜索 Tabu Search

文章目录 Tabu searchTabu search算法算例-旅行商TSP问题Tabu search 从一个初始可行解出发,选择一系列的特定搜索方向(移动)作为试探,选择实现让特定的目标函数值变化最多的移动。 为了避免陷入局部最优解,TS搜索中采用了一种灵活的“记忆”技术,对已经进行的优化过程进…

2024年目标检测研究进展

YOLOv9 图片来源网络 YOLO相关的研究&#xff1a;https://blog.csdn.net/yunxinan/article/details/103431338

网络安全: Kali Linux 进行 SSH 渗透与防御

目录 一、实验 1.环境 2.nmap扫描目标主机 3.Kali Linux 进行 SSH 渗透 3.Kali Linux 进行 SSH 防御 二、问题 1.SSH有哪些安全配置 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 系统版本IP备注Kali Linux2022.4 192.168.204.154&#xff08;动态&…

【软考】单元测试

目录 1. 概念2. 测试内容2.1 说明2.2 模块接口2.3 局部数据结构2.4 重要的执行路径 3. 测试过程2.1 说明2.2 单元测试环境图2.3 驱动模块2.4 桩模块 4. 模块接口测试与局部数据结构测试的区别 1. 概念 1.单元测试也称为模块测试&#xff0c;在模块编写完成且无编译错误后就可以…

使用React Context和Hooks在React Native中共享蓝牙数据

使用React Context和Hooks在React Native中共享蓝牙数据 **背景****实现步骤****步骤 1: 创建并导出bleContext****步骤 2: 在App.tsx中使用bleContext.Provider提供数据****步骤 3: 在父组件和子组件中访问共享的数据** **结论** 在开发React Native应用时&#xff0c;跨组件共…

16.Git从入门到进阶

一.Git 初识 1. 概念&#xff1a; 一个免费开源&#xff0c;分布式的代码版本控制系统&#xff0c;帮助开发团队维护代码 2. 作用&#xff1a; 记录代码内容&#xff0c;切换代码版本&#xff0c;多人开发时高效合并代码内容 3. 如何学&#xff1a; 个人本机使用&#xf…

SQL中的不加锁查询 with(nolock)

WITH(NOLOCK) 是一种 SQL Server 中的表提示&#xff08;table hint&#xff09;&#xff0c;可以用来告诉数据库引擎在查询数据时不要加锁&#xff0c;以避免因为锁等待导致查询性能下降。 当多个事务同时访问同一张表时&#xff0c;数据库引擎会对表进行锁定&#xff0c;以确…

数据库中 SQL Hint 是什么?

前言 最近在调研业界其他数据库中 SQL Hint 功能的设计和实现&#xff0c;整体上对 Oracle、Mysql、Postgresql、 Apache Calcite 中的 SQL Hint 的设计和功能都进行了解&#xff0c;这里整理一篇文章来对其进行梳理&#xff0c;一是帮助自己未来回顾&#xff0c;加深自己的思…

Python之Web开发中级教程----搭建Git环境三

Python之Web开发中级教程----搭建Git环境三 多人分布式使用仓库操作实例 场景&#xff1a;开发者A&#xff0c;开发者B在同一个项目协同开发&#xff0c;修改同一个代码文件。开发者A在Win10下&#xff0c;开发者B在Ubuntu下。 1、开发者A修改提交代码 从GitHub: Let’s bu…

44岁「台偶一哥」成现实版「王子变青蛙」,育一子一女成人生赢家

电影《周处除三害》近日热度极高&#xff0c;男主角阮经天被大赞演技出色&#xff0c;最让人意想不到&#xff0c;因为该片在内地票房报捷&#xff0c;很多人走去恭喜另一位台湾男艺人明道&#xff0c;皆因二人出道时外貌神似&#xff0c;至今仍有不少人将两人搞混。 多年过去&…

11.Node.js入门

一.什么是 Node.js Node.js 是一个独立的 JavaScript 运行环境&#xff0c;能独立执行 JS 代码&#xff0c;因为这个特点&#xff0c;它可以用来编写服务器后端的应用程序 Node.js 作用除了编写后端应用程序&#xff0c;也可以对前端代码进行压缩&#xff0c;转译&#xff0c;…