当前位置: 首页 > news >正文

【C++】每日一练(有效的括号)

本篇博客给大家带来的是用C++语言来解答有效的括号!

🐟🐟文章专栏:每日一练

🚀🚀若有问题评论区下讨论,我会及时回答

❤❤欢迎大家点赞、收藏、分享!

今日思想:不服输的少年啊,请你再努力一下!

题目描述: 

思路:

        我们利用栈来解答,首先遍历数组我们找左括号把他放到栈里,然后再找游括号来看看是否与之匹配。如果遍历完之后栈为空代表匹配完成返回true,反之返回false。

        注意如果没学习过栈的可以看看这篇博客:【C++】数据结构 栈的实现-CSDN博客

代码实例:

typedef char STDataType;
typedef struct Stack
{
	STDataType* arr;
	int top;//指向栈顶的结构
	int capacity;//容量
}ST;

//栈的初始化
void STInit(ST* ps)
{
	ps->arr = NULL;
	ps->top = ps->capacity = 0;
}
//入栈-栈顶
void StackPush(ST* ps, STDataType x)
{
	assert(ps);
	if (ps->top == ps->capacity)
	{
		//空间不够-增容
		int newCapacity = ps->capacity == 0 ? 4 : 2*ps->capacity;
		STDataType* tmp = (STDataType*)realloc(ps->arr, newCapacity * sizeof(STDataType));
		if (tmp == NULL)
		{
			perror("realloc fail!");
			exit(1);
		}
		ps->arr = tmp;
		ps->capacity = newCapacity;
	}
	//空间够了
	ps->arr[ps->top++] = x;
}
//判断栈是否为空
bool StackEmpty(ST* ps)
{
	assert(ps);
	return ps->top == 0;
}
//拿栈顶的数据
STDataType StackTop(ST* ps)
{
	assert(!StackEmpty(ps));
	return ps->arr[ps->top - 1];
}
//栈的销毁
void STDestroy(ST* ps)
{
	if (ps->arr)
		free(ps->arr);
	ps->arr = NULL;
	ps->top = ps->capacity = 0;
}
//出栈-栈顶
void StackPop(ST* ps)
{
	assert(!StackEmpty(ps));
	--ps->top;
}
bool isValid(char* s) 
{
    ST st;
    STInit(&st);
    char* pi=s;
    //遍历所有的字符串s
    while(*pi !='\0')
    {
        if(*pi=='(' ||*pi=='[' ||*pi=='{')
        {
            StackPush(&st,*pi);
        }
        else
        {
            //找右括号并且与之匹配
            if(StackEmpty(&st))//判断栈是否为空
            {
                STDestroy(&st);
                return false;
            }
            char top=StackTop(&st);
            if((top=='(' && *pi != ')')
            || (top=='[' && *pi !=']')
            || (top=='{' && *pi !='}'))
            {
                STDestroy(&st);
                return false;
            }
            StackPop(&st);
        }
        pi++;
    }
    //栈为空,说明所有的左括号都已经匹配完,反之非有效字符
    bool ret =StackEmpty(&st)?true:false;
    return ret;
}

完!! 


文章转载自:

http://X52H4wb7.rzsxb.cn
http://dvTHEdyC.rzsxb.cn
http://NCc5o1oa.rzsxb.cn
http://ZAlLq7R3.rzsxb.cn
http://RwSDJGul.rzsxb.cn
http://pwaEQykQ.rzsxb.cn
http://1AMRSf0S.rzsxb.cn
http://1vAOMxrc.rzsxb.cn
http://cQcfIqEJ.rzsxb.cn
http://KB768LaD.rzsxb.cn
http://G7Vwe3nK.rzsxb.cn
http://yfZQ86JQ.rzsxb.cn
http://HeKwbZSR.rzsxb.cn
http://Arcq1tVK.rzsxb.cn
http://4o7dQ66Z.rzsxb.cn
http://TUZ3VPxY.rzsxb.cn
http://NWLOYllD.rzsxb.cn
http://qbwWyqhp.rzsxb.cn
http://hs7T1JHs.rzsxb.cn
http://gNrCaNUg.rzsxb.cn
http://HdLHMK4g.rzsxb.cn
http://BWtv13jT.rzsxb.cn
http://R6LS2ZvV.rzsxb.cn
http://nkx4lSUN.rzsxb.cn
http://mRKmEk4l.rzsxb.cn
http://d4qLegv8.rzsxb.cn
http://ZquSrVfD.rzsxb.cn
http://IOSw3ihG.rzsxb.cn
http://stRecbyH.rzsxb.cn
http://4r1bq3z1.rzsxb.cn
http://www.dtcms.com/a/66042.html

相关文章:

  • 【如何使用云服务器与API搭建专属聊天系统:宝塔面板 + Openwebui 完整教程】
  • 【Python办公】Excel通用匹配工具(双表互匹)
  • Android 自定义蓝牙扫描动画:多波浪扩散效果
  • vue启动 localhost无法访问
  • 了解一下HTTP的短连接和长连接
  • 计算机视觉算法实战——手势识别(主页有源码)
  • Linux Shell脚本-实现账户库数据同步到交易库
  • kvm 创建虚拟机核心分析
  • 双指针算法专题之——复写零
  • CLR中的类型转换
  • 玩转python:通俗易懂掌握高级数据结构:collections模块之deque
  • C++中类对象作为类成员(对象成员/成员对象)的一些注意事项
  • vue2的webpack(vue.config.js) 怎么使用请求转发 devServer.proxy
  • AGI大模型(5):提示词工程
  • ubuntu20.04
  • 铁人三项(第五赛区)_2018_rop题解
  • 《算法笔记》8.1小节——搜索专题->深度优先搜索(DFS)问题 D: 【递归入门】n皇后 问题(原始的8皇后问题)
  • 我又又又又又又更新了~~纯手工编写C++画图,有注释~~~
  • 【C#】使用DeepSeek帮助评估数据库性能问题,C# 使用定时任务,每隔一分钟移除一次表,再重新创建表,和往新创建的表追加5万多条记录
  • USER与多组织关联的SQL查询以及几个关键函数用法
  • ​面向对象与面向过程编程:从概念到实战的深度解析
  • ROS学习过程(一)
  • unity几种设计模式(自用)
  • 【复习】补充
  • Cookie与Session详解
  • C++ string
  • ES6(1) 简介与基础概念
  • 计算机二级——Python:Day1
  • 力扣215.数组中的第K个最大元素--堆排序法(java)
  • 透过安全事件看软件组成分析SCA