​数据结构—栈操作经典案例

括号匹配:

 这是我最开始写的,运行有问题

对于输入的括号序列,建议使用标准的 C++ 字符串而不是字符数组。

#include<iostream> 
using namespace std;typedef char SelemType;
typedef int Status;
#define OK 1
#define MAXSIZE 100
#define ERROR -1// 定义栈结构
typedef struct {SelemType* base;SelemType* top;int stacksize;
} sqstack;// 初始化栈
Status InitStack(sqstack& S) {S.base = new SelemType[MAXSIZE];S.top = S.base;S.stacksize = MAXSIZE;return OK;
}// 入栈操作
Status Push(sqstack& S, SelemType e) {if (S.top - S.base == S.stacksize)return ERROR;*S.top++ = e;return OK;
}// 出栈操作
Status Pop(sqstack& S, SelemType& e) {if (S.top == S.base)return ERROR;e = *--S.top;return OK;
}//判断栈空
bool StackEmpty(sqstack S) {if (S.top == S.base)return true;elsereturn false;
}//取栈顶元素
SelemType Gettop(sqstack S) {if (!StackEmpty)return *(S.top - 1);
}//括号匹配 
bool Macthing(SelemType a[]) {sqstack S;InitStack(S);SelemType e;int flag = 1;for (int i = 1; i <= strlen(a); i++) {while (flag && a[i] != '\0') {switch (a[i]) {case '[':case'(':Push(S, a[i]);case']':if (!StackEmpty && Gettop(S) == '[')Pop(S, e);else{flag = 0;break;}case')':if (!StackEmpty && Gettop(S) == '(')Pop(S, e);else{flag = 0;break;}}}}if (StackEmpty(S) && flag) return true;else return false;}int main() {SelemType a[] = { "(([]))" };if (Macthing(a))cout << "匹配成功" << endl;elsecout << "匹配失败" << endl;}

 修改如下


使用标准的 C++ 字符串string str = "(([]))"; 
bool Matching(string a) ;while (flag && i < a.length()) 

 完整代码:

#include<iostream> 
using namespace std;typedef char SelemType;
typedef int Status;
#define OK 1
#define MAXSIZE 100
#define ERROR -1// 定义栈结构
typedef struct {SelemType* base;SelemType* top;int stacksize;
}SqStack;// 初始化栈
Status InitStack(SqStack& S) {S.base = new SelemType[MAXSIZE];S.top = S.base;S.stacksize = MAXSIZE;return OK;
}// 入栈操作
Status Push(SqStack& S, SelemType e) {if (S.top - S.base == S.stacksize)return ERROR; *S.top++ = e;return OK;
}// 出栈操作
Status Pop(SqStack& S, SelemType& e) {if (S.top == S.base)return ERROR; e = *--S.top;return OK;
}// 判断栈是否为空
bool IsStackEmpty(SqStack S) { if (S.top == S.base)return true;elsereturn false;
}// 获取栈顶元素
SelemType GetTop(SqStack S) {return *(S.top-1);
}// 括号匹配 
bool Matching(string a) {SqStack S;InitStack(S);SelemType e;int i = 0;bool flag = true;while (flag && i < a.length()) {switch (a[i]) {case '[':case '(':Push(S, a[i]);break; case ']':if (!IsStackEmpty(S) && GetTop(S) == '[')Pop(S, e);else {flag = false;break; }break; case ')':if (!IsStackEmpty(S) && GetTop(S) == '(')Pop(S, e);else {flag = false;break; }break; }i++;}if (IsStackEmpty(S) && flag)return true;elsereturn false;}int main() {string str;cin >> str;// 使用标准的 C++ 字符串if (Matching(str))cout << "匹配成功" << endl;elsecout << "匹配失败" << endl;return 0;}

运行结果:

基本栈操作和前面一致,后面不再给出。 

进制转化

代码:


//进制转化void converse(int N, int d) {
sqstack S;
InitStack(S);
while (N) {
SelemType ch;
int k = N % d;
ch = k <= 9 ? '0' + k : 'A' + k - 10;
Push(S, ch);
N = N/ d;
}
SelemType h; //h接收弹出栈的元素
while (S.top != S.base) {
Pop(S, h);
cout << h;
}
}
int main() {
cout << "12分别转化为2进制,8进制,16进制" << endl;
Conversion(12, 2);
cout << endl;
Conversion(12, 8);
cout << endl;
Conversion(12, 16);
}

运行结果:

回文判断: 

代码:

//判断是否回文bool huiwen(char st[]) {sqstack S;InitStack(S);// 遍历字符串的前半部分并入栈for (int i = 0; i < strlen(st) / 2; i++) {Push(S, st[i]); }SelemType ch;// 当栈不为空时,继续出栈比较while (S.top != S.base) {Pop(S, ch);// 如果出栈的字符与字符串后半部分的字符不相等,说明不是回文,返回 falseif (ch != st[strlen(st) - 1 - (S.top - S.base)])return false;}// 如果栈为空且没有找到不相等的字符,说明是回文,返回 truereturn true;
}
int main() {char st[100];// 使用 cin.getline 输入字符串cin.getline(st, 100);bool b = huiwen(st);if (b)cout << "是回文" << endl;elsecout << "不是回文" << endl;return 0;}

运行结果:

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

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

相关文章

八、组合数据类型(列表、元组、集合、字典)

序列&#xff1a;存储多个值的连续空间&#xff0c;每个值对应一个编号————索引 包括&#xff1a;列表、元组、集合和字典 相加操作 s1"桂林山水" s2山水甲天下 print(s1s2)#直接相加得到新的字符串 print(_____________________________) print((s1s2)*5,sep&…

Zeppelin安装

Zeppelin是一个基于Web的开源数据分析可视化工具&#xff0c;它提供了一个交互式的笔记本界面&#xff0c;用于在大数据环境中进行数据探索、数据分析、数据可视化和协作。Zeppelin的主要特点包括多语言支持、可视化功能、数据共享和协作&#xff0c;以及扩展性。它支持多种编程…

施耐德 Unity Pro PLC 编程软件介绍

Unity Pro 软件基本介绍 Unity Pro 是施耐德中大型 PLC 的编程软件&#xff08;<–> 对应西门子 Step7&#xff09; 支持的 PLC&#xff1a;施耐德中大型 PLC 中型 PLC&#xff1a;Premium、M340&#xff08;<–> 对应西门子 S7-300、S7-1200&#xff09;大型 PL…

Matlab中的脚本和函数

Matlab中的脚本和函数 文章目录 Matlab中的脚本和函数脚本创建脚本代码注释函数创建函数局部函数嵌套函数私有函数匿名函数补充知识函数句柄测试环境:Win11 + Matlab R2021a 脚本 ​ Matlab脚本是最简单的程序文件类型。它们可用于自动执行一系列 Matlab 命令,如命令行重复执…

机器人深度学习IMU和图像数据实现焊接精细操作

在双电极气体保护金属弧焊 &#xff08;DE-GMAW&#xff09; 中&#xff0c;对焊枪和旁路电极位置的精确控制是至关重要的。为了这一过程&#xff0c;科研团队提出了安装微型惯性测量单元&#xff08;IMU&#xff09;传感器和摄像头&#xff0c;来记录焊工控制焊枪的移动和微调…

数据挖掘|贝叶斯分类器及其Python实现

分类分析|贝叶斯分类器及其Python实现 0. 分类分析概述1. Logistics回归模型2. 贝叶斯分类器2.1 贝叶斯定理2.2 朴素贝叶斯分类器2.2.1 高斯朴素贝叶斯分类器2.2.2 多项式朴素贝叶斯分类器 2.3 朴素贝叶斯分类的主要优点2.4 朴素贝叶斯分类的主要缺点 3. 贝叶斯分类器在生产中的…

C语言——内存函数

前言&#xff1a; C语言中除了字符串函数和字符函数外&#xff0c;还有一些函数可以直接对内存进行操作&#xff0c;这些函数被称为内存函数&#xff0c;这些函数与字符串函数都属于<string.h>这个头文件中。 一.memcpy&#xff08;&#xff09;函数 memcpy是C语言中的…

JavaScript(三)---【this指针,函数定义、Call、Apply、函数绑定、闭包】

零.前言 JavaScript(一)---【js的两种导入方式、全局作用域、函数作用域、块作用域】-CSDN博客 JavaScript(二)---【js数组、js对象、this指针】-CSDN博客 0.1全局对象 在JS中有一个全局对象&#xff1a;“window object”&#xff0c;代指的是整个HTML。 一定要慎用全局对…

安卓玩机工具推荐----MTK芯片读写分区 备份分区 恢复分区 制作线刷包 从0开始 工具操作解析【三】

同类博文; 安卓玩机工具推荐----MTK芯片读写分区 备份分区 恢复分区 制作线刷包 工具操作解析 安卓玩机工具推荐----MTK芯片读写分区 备份分区 恢复分区 制作线刷包 工具操作解析【二】-CSDN博客 回顾以往 在以前的博文简单介绍了这款工具的rom制作全程。今天针对这款工具的…

ubuntu23.10配置RUST开发环境

系统版本: gcc版本 下载rustup安装脚本: curl --proto https --tlsv1.2 https://sh.rustup.rs -sSf | sh下载完成后会自动执行 选择默认安装选项 添加cargo安装目录到环境变量 vim ~/.bashrc 默认已添加 使用环境变量立即生效 source ~/.bashrc 执行rust开发环境,在终端输入…

1.java 安装

操作步骤 下载: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html1 通过Xftp将下载下来的jdk上传到指定虚拟机上传到/usr目录下 2 通过Xshell连接到虚拟机&#xff0c;执行如下命令&#xff0c;解压文件&#xff1a; $ tar zxvf jdk-8u…

Python版【植物大战僵尸 +源码】

文章目录 写在前面&#xff1a;功能实现环境要求怎么玩个性化定义项目演示&#xff1a;源码分享Map地图:Menubar.py主菜单 主函数&#xff1a;项目开源地址 写在前面&#xff1a; 今天给大家推荐一个Gtihub开源项目&#xff1a;PythonPlantsVsZombies&#xff0c;翻译成中就是…

LongAdder 和 AtomicLong

有幸看到一篇关于这个讲解 2个类的讲解&#xff0c;自己也归纳总结一下。 一、解析 看源码底层会发现实现机制不一样&#xff0c;当然这个也是必须的 LongAdder 点进去之后会发现&#xff0c;CAS 它是一个CAS的实现类。至于Cell类JVM提供的内置函数 官方说法是&#xff1a;…

Linux简单命令

Linux简单命令 本文是自己学习过程中的一些记录&#xff0c;对于熟悉的部分并未全部列出&#xff0c;仅供参考 内核架构图 一切皆是文件 常用的linux命令 用户的管理 修改密码&#xff1a;passwd 创建一个新用户&#xff1a;useradd 用户名给新用户设置密码&#xff1a;…

UE RPC 外网联机(1)

技术&#xff1a;RPC TCP通信 设计&#xff1a;大厅服务<---TCP--->房间服务<---RPC--->客户端&#xff08;Creator / Participator&#xff09; 1. PlayerController 用于RPC通信控制 2.GameMode 用于数据同步 3.类图 4. 注意 &#xff08;1&#xff09;RPC&a…

AR-Net网络(图像篡改检测)

AR-Net网络 摘要AbstractAR-Net1. 文献摘要2. 研究背景3. 创新点4. AR-Net 网络架构5. 实验6. 结论总结 摘要 AR-Net使用自适应注意力机制来融合位置和通道维度的特征&#xff0c;使网络能够充分利用不同维度的被篡改特征&#xff0c;此外&#xff0c;AR-Net 改进了预测掩模&a…

数字乡村发展蓝图:科技赋能农村实现全面振兴

目录 一、数字乡村发展蓝图的内涵与目标 二、科技赋能农村&#xff1a;数字乡村发展的动力与路径 &#xff08;一&#xff09;加强农业科技创新&#xff0c;提升农业生产效率 &#xff08;二&#xff09;推进农村电商发展&#xff0c;拓宽农民增收渠道 &#xff08;三&…

如何成功找到理想的工作,java不行了吗?我靠这个方法成功拿到大厂10个offer

第一段&#xff1a;引言 作为一名即将毕业的大学生&#xff0c;步入职场是每个毕业生都要面对的现实挑战。随着社会竞争的日益激烈&#xff0c;如何成功找到一份理想的工作成为许多毕业生所关注的焦点。本文将分享一些关于毕业生求职的经验和建议&#xff0c;希望能够帮助毕业生…

Redis怎样保证数据安全?

问题&#xff1a;Redis默认是没有设置密码 调研&#xff1a;Redis默认没有设置密码是因为它的设计目标是追求高性能和低延迟。 当Redis配置文件中启用密码后&#xff0c;客户端连接Redis时需要进行密码验证。这个验证过程会增加CPU的负载&#xff0c;并可能导致链接响应时间变长…

数据挖掘入门项目二手交易车价格预测之特征工程

文章目录 目标常见的特征工程具体步骤1. 导入数据2. 删除异常值3. 特征构造3.1 为树模型构造特征3.2 为LR NN 之类的模型构造特征 4. 特征筛选过滤式包裹式嵌入式 5. 总结 本文数据集来自阿里天池&#xff1a;https://tianchi.aliyun.com/competition/entrance/231784/informat…