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

括号匹配:

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

对于输入的括号序列,建议使用标准的 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.mzph.cn/news/782764.shtml

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

相关文章

python基础——异常捕获【try-except、else、finally】

&#x1f4dd;前言&#xff1a; 这篇文章主要介绍一下python基础中的异常处理&#xff1a; 1&#xff0c;异常 2&#xff0c;异常的捕获 3&#xff0c;finally语句 &#x1f3ac;个人简介&#xff1a;努力学习ing &#x1f4cb;个人专栏&#xff1a;C语言入门基础以及python入门…

【C++】右值引用

目录 前言&#xff1a;一、左值引用和右值引用1.1 什么是左值和左值引用1.2 什么是右值和右值引用 二、左值引用和右值引用比较三、右值引用使用场景3.1 传值返回使用场景3.2 移动构造3.3 移动赋值3.4 STL容器接口也增加右值引用3.5 完美转发 前言&#xff1a; 引用是给对象取…

HarmonyOS 应用开发之模型切换

本文介绍如何将一个FA模型开发的声明式范式应用切换到Stage模型&#xff0c;您需要完成如下动作&#xff1a; 工程切换&#xff1a;新建一个Stage模型的应用工程。 配置文件切换&#xff1a;config.json切换为app.json5和module.json5。 组件切换&#xff1a;PageAbility/Serv…

不同的batch_size对精度和损失的影响研究

1 问题 不同的batch_size对训练集和验证集的精度和损失的影响有多大&#xff1f; 2 方法 通过设置不同batch_size算出不同batch_size对应的训练集精度、训练集损失和验证集的精度和损失&#xff0c;通过数据可视化将精度和损失展示出来&#xff0c;比较出不同batch_size对他们的…

CTK插件框架学习-插件注册调用(03)

CTK插件框架学习-新建插件(02)https://mp.csdn.net/mp_blog/creation/editor/136923735 一、CTK插件组成 接口类&#xff1a;对外暴露的接口&#xff0c;供其他插件调用实现类&#xff1a;实现接口内的方法激活类&#xff1a;负责将插件注册到CTK框架中 二、接口、插件、服务…

文生视频大模型Sora的复现经验

大家好&#xff0c;我是herosunly。985院校硕士毕业&#xff0c;现担任算法研究员一职&#xff0c;热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名&#xff0c;CCF比赛第二名&#xff0c;科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的…

BFS专题

1、BFS解决FloodFill算法 1、1图像渲染 733. 图像渲染 - 力扣(LeetCode) class Solution {typedef pair<int,int> PII;int dx[4] = {0,0,1,-1};int dy[4] = {1,-1,0,0}; public:vector<vector<int>> floodFill(vector<vector<int>>& i…

RIP环境下的MGRE 综合实验

实验题目及要求&#xff1a; 1.R5为ISP&#xff0c;只能进行IP地址配置&#xff0c;其所有地址均配为公有IP地址 2.R1和R5间使用PPP的PAP认证&#xff0c;R5为主认证方; R2于R5之间使用PPP的chap认证&#xff0c;R5为主认证方&#xff1b; R3于R5之间使用HDLC封装。 3.R1/…

【C++】为什么能实现函数重载

从C语言一路学到C的途中&#xff0c;C语言C语言相比&#xff0c;多了个函数重载&#xff0c;那么函数重载是如何实现的呢&#xff0c;为什么C语言无法支持&#xff0c;在本篇博客中&#xff0c;将会讲解C为何能实现函数重载。 一.编译过程 C能实现函数重载&#xff0c;而C语言不…

QT 二维坐标系显示坐标点及点与点的连线-通过定时器自动添加随机数据点

QT 二维坐标系显示坐标点及点与点的连线-通过定时器自动添加随机数据点 功能介绍头文件C文件运行过程 功能介绍 上面的代码实现了一个简单的 Qt 应用程序&#xff0c;其功能包括&#xff1a; 创建一个 MainWindow 类&#xff0c;继承自 QMainWindow&#xff0c;作为应用程序的…

2024软件设计师备考讲义——UML(统一建模语言)

UML的概念 用例图的概念 包含 <<include>>扩展<<exted>>泛化 用例图&#xff08;也可称用例建模&#xff09;描述的是外部执行者&#xff08;Actor&#xff09;所理解的系统功能。用例图用于需求分析阶段&#xff0c;它的建立是系统开发者和用户反复…

Pyppeteer中Chromium安装步骤

1、下载压缩文件 在官网下载chrome-win.zip文件 2、终端下载pyppeteer 首先在Pycharm终端运行pip install pyppeteer 3、查找文件默认路径 在运行以下代码&#xff0c;找到可执行文件默认路径 import pyppeteer.chromium_downloader print(默认版本是&#xff1a;{}.forma…

牛角工具箱源码 轻松打造个性化在线工具箱

&#x1f389; Whats this&#xff1f; 这是一款在线工具箱程序&#xff0c;您可以通过安装扩展增强她的功能 通过插件模板的功能&#xff0c;您也可以把她当做网页导航来使用~ 觉得该项目不错的可以给个Star~ &#x1f63a; 演示地址 https://tool.aoaostar.com &#x1f…

TCP网络协议栈和Posix网络部分API总结

文章目录 Posix网络部分API综述TCP协议栈通信过程TCP三次握手和四次挥手&#xff08;看下图&#xff09;三次握手常见问题&#xff1f;为什么是三次握手而不是两次&#xff1f;三次握手和哪些函数有关&#xff1f;TCP的生命周期是从什么时候开始的&#xff1f; 四次挥手通信状态…

HarmonyOS实战开发-如何实现一个自定义抽奖圆形转盘

介绍 本篇Codelab是基于画布组件、显式动画&#xff0c;实现的一个自定义抽奖圆形转盘。包含如下功能&#xff1a; 通过画布组件Canvas&#xff0c;画出抽奖圆形转盘。通过显式动画启动抽奖功能。通过自定义弹窗弹出抽中的奖品。 相关概念 Stack组件&#xff1a;堆叠容器&am…

从0开始搭建基于VUE的前端项目(一) 项目创建和配置

准备与版本 安装nodejs(v20.11.1)安装vue脚手架(@vue/cli 5.0.8) ,参考(https://cli.vuejs.org/zh/)vue版本(2.7.16),vue2的最后一个版本vue.config.js的配置详解(https://cli.vuejs.org/zh/config/)element-ui(2.15.14)(https://element.eleme.io/)vuex(3.6.2) (https://…

K8S命令行可视化实验

以下为K8s命令行可视化工具的实验内容&#xff0c;相比于直接使用命令行&#xff0c;可视化工具可能更直观、更易于操作。 Lens Lens是用于监控和调试的K8S IDE。可以在Windows、Linux以及Mac桌面上完美运行。在 Kubernetes 上&#xff1a; 托管地址&#xff1a;github/lensa…

机器人运动控制

一、基础 1.1 矢量速度和旋转速度 矢量速度用来控制运动方向&#xff0c;任何一个方向都可以看成x、y、z三轴方向的合。单位规定是m/s。 旋转速度用来控制旋转方向&#xff0c;可以看成x、y、z三轴方向旋转的合。单位规定是pi/s。 速度消息包&#xff0c;可以在ROS Index上搜…

助力福建新型职业农民培育 北方天途推进无人机植保应用培训

为加强新型职业农民的职业培育&#xff0c;扩展新型农民的知识范围和专业技术水平&#xff0c;推进农业供给侧结构性改革。日前&#xff0c;在农业部门的大力支持下&#xff0c;北方天途航空和宁德天禾科技服务携手为福建省农民朋友开展了植保无人机驾驶员的应用培训。福建省农…

网页布局案例 浮动

这里主要讲浮动 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>*{padding: 0;margin: 0;}.header{height: 40px;background-color: #333;}.nav{width: 1226px;heig…