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

括号匹配:

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

对于输入的括号序列,建议使用标准的 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,一经查实,立即删除!

相关文章

Qt5.14.2 程序的华丽开场,让Splash窗口释放无限可能!

作为一款有追求的优秀软件&#xff0c;启动时的那个小小的Splash窗口可谓是程序的形象大使&#xff0c;它展现着软件精雕细琢的品味和非凡的待客之道。今天&#xff0c;就让我们一同领略Qt对这个"开场小品"的深谙之道——Splash窗口设计&#xff0c;感受一番Qt大神们…

Python数据分析九

一、Python之列表操作方法remove和pop 在Python中&#xff0c;列表还提供了其他一些常用的操作方法&#xff0c;例如删除指定元素和弹出&#xff08;移除并返回&#xff09;指定位置的元素。其中&#xff0c;remove()方法用于删除列表中第一个匹配的元素&#xff0c;而pop()方…

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;科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的…

Web墨卡托投影和普通墨卡托投影是一样的吗?Web墨卡托投影与EPSG:3857坐标系的关系,EPSG:3857坐标系和EPSG:4326坐标系有什么区别?

Web墨卡托投影和普通墨卡托投影在本质上是相同的,但它们在坐标范围使用单位和应用领域上存在一些区别: 坐标范围: 普通墨卡托投影的坐标范围通常在整个地球表面上,由于使用浮点数表示,所以不限制其范围。Web墨卡托投影的坐标范围通常被限制在一个固定的范围内,以适应Web地…

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/…

python保存中间变量(学习笔记)

python保存中间变量 原因&#xff1a; 最近在部署dust3r算法&#xff0c;虽然在本地部署了&#xff0c;也能测试出一定的结果&#xff0c;但是发现无法跑很多图片&#xff0c;为了能够测试多张图片跑出来的模型&#xff0c;于是就在打算在autodl上部署算法&#xff0c;但是由…

【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…

sql注入相关题目

1.ctf.show_web10 &#xff08;1&#xff09;$regex "/(select|from|where|join|sleep|and|\s|union|,)/i"; &#xff08;2&#xff09;没有回显 &#xff08;3&#xff09;只要用户名密码正确&#xff0c;即可得到flag usernameadmin/**/or/**/11/**/group/**/…

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

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

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

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