动态堆栈类及括号匹配(考察类的构建与应用)

2024-03-30 15:52

本文主要是介绍动态堆栈类及括号匹配(考察类的构建与应用),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

NWAFU OOP02_02


一、题目描述

Description

设计一个动态字符堆栈类,要求堆栈可存储的字符数量可动态扩展,在构造函数中使用new进行初始堆栈空间内存分配,在析构函数中采用delete释放内存,堆栈类框架如下所示:

class CStack
{char *s;int tp;int size;public:CStack(int initSize = 5);~CStack();bool isEmpty();bool isFull();void push(char c);char pop();char top();};

编码完善上述动态字符堆栈类,基于此堆栈类,判断一个字符串中的括号是否正确匹配。如输入"{[(1+2)/(3+4)*5-3]*2}/3-4",则字符串中的括号匹配,若输入"[(])",则字符串中的括号不匹配。

Input

采用getline(cin, string)读入一个可能包含"()[]{}"三种括号的字符串。

Output

判断输入字符串中的括号是否正确匹配,若正确匹配,输出"Balanced",否则输出"Not balanced"。

Sample Input 1 

{[9+(3-1)*3+10]-5}/2

Sample Output 1

Balanced

Sample Input 2 

int main(){int a;cin >> a; if (a==0)cout << "Hello world!" << endl;else cout << "Hello China!" << endl;

Sample Output 2

Not balanced

二、设计步骤

代码实现:

#include <iostream>
#include <string>
using namespace std;class CStack {char *s;int tp;int size;public:CStack(int initSize = 5);~CStack();bool isEmpty();bool isFull();void push(char c);char pop();char top();
};CStack::CStack(int initSize) {size = initSize;s = new char[size];tp = -1;
}CStack::~CStack() {delete[] s;
}bool CStack::isEmpty() {return (tp == -1);
}bool CStack::isFull() {return (tp == size - 1);
}void CStack::push(char c) {if (isFull()) {int newSize = size * 2;char *newS = new char[newSize];for (int i = 0; i < size; ++i) {newS[i] = s[i];}delete[] s;s = newS;size = newSize;}s[++tp] = c;
}char CStack::pop() {if (isEmpty()) {return '\0'; }return s[tp--];
}char CStack::top() {if (isEmpty()) {return '\0'; }return s[tp];
}bool isMatchingPair(char character1, char character2) {if (character1 == '(' && character2 == ')')return true;else if (character1 == '[' && character2 == ']')return true;else if (character1 == '{' && character2 == '}')return true;elsereturn false;
}bool isBalanced(string exp) {CStack stack(exp.length());for (int i = 0; i < exp.length(); i++) {if (exp[i] == '(' || exp[i] == '[' || exp[i] == '{')stack.push(exp[i]);else if (exp[i] == ')' || exp[i] == ']' || exp[i] == '}') {if (stack.isEmpty() || !isMatchingPair(stack.pop(), exp[i]))return false;}}return stack.isEmpty();
}int main() {string expression;getline(cin, expression);if (isBalanced(expression))cout << "Balanced";elsecout << "Not balanced";return 0;
}

总结

EOF

这篇关于动态堆栈类及括号匹配(考察类的构建与应用)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/861913

相关文章

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

Python利用PySpark和Kafka实现流处理引擎构建指南

《Python利用PySpark和Kafka实现流处理引擎构建指南》本文将深入解剖基于Python的实时处理黄金组合:Kafka(分布式消息队列)与PySpark(分布式计算引擎)的化学反应,并构建一... 目录引言:数据洪流时代的生存法则第一章 Kafka:数据世界的中央神经系统消息引擎核心设计哲学高吞吐

SpringBoot3匹配Mybatis3的错误与解决方案

《SpringBoot3匹配Mybatis3的错误与解决方案》文章指出SpringBoot3与MyBatis3兼容性问题,因未更新MyBatis-Plus依赖至SpringBoot3专用坐标,导致类冲... 目录SpringBoot3匹配MyBATis3的错误与解决mybatis在SpringBoot3如果

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

Python中yield的用法和实际应用示例

《Python中yield的用法和实际应用示例》在Python中,yield关键字主要用于生成器函数(generatorfunctions)中,其目的是使函数能够像迭代器一样工作,即可以被遍历,但不会... 目录python中yield的用法详解一、引言二、yield的基本用法1、yield与生成器2、yi