力扣第20题有效的括号

typedef char STDataType;
//动态栈
#define allocator_may_return_null 1

typedef struct ST {
    STDataType* _a;
    int _top;//栈顶元素
    int _capacity;//最大容量
}Stack;
//初始化栈
void StackInit(Stack *pst);

//入栈
void StackPush(Stack* pst, STDataType x);

//出栈
void StackPop(Stack* pst);

//获取栈顶元素
STDataType StackTop(Stack* pst);


//判断栈是否为空,是返回1,非空返回0
bool StackEmpty(Stack* pst);

//打印栈
void StackPrint(Stack* pst);

//销毁栈
void StackDestory(Stack* pst);



//初始化栈
void StackInit(Stack* pst)
{
	assert(pst);
	pst->_a = NULL;
	pst->_top = 0;
	pst->_capacity = 0;
}
//入栈
void StackPush(Stack* pst, STDataType x)
{
	assert(pst);
	if (pst->_top == pst->_capacity)
	{
		int newcapacity = pst->_capacity == 0 ? 4 : (pst->_capacity * 2);
		STDataType* temp = (STDataType*)realloc(pst->_a, sizeof(STDataType) * newcapacity);
		if (temp == NULL)
		{
			printf("realloc fail\n");
			exit(1);
		}
		pst->_a = temp;
		pst->_capacity = newcapacity;
	}
	pst->_a[pst->_top] = x;
	pst->_top++;
}


//出栈
void StackPop(Stack* pst)
{
	assert(pst);
	assert(pst->_top > 0);
	pst->_top--;
}

//获取栈顶元素
STDataType StackTop(Stack* pst)
{
	assert(pst);
	assert(pst->_top>0);
	return pst->_a[pst->_top-1];
}

//获取栈的有效元素个数
int StackSize(Stack* pst)
{
	assert(pst);
	return pst->_top;
}

//判断栈是否为空,是返回1,非空返回0
bool StackEmpty(Stack* pst)
{
	assert(pst);
	if (pst->_top == 0)
		return true;
	else
		return false;
}

//打印栈
void StackPrint(Stack* pst)
{
	while (!StackEmpty(pst))
	{
		printf("%d\n", StackTop(pst));
		StackPop(pst);
	}
}


//销毁栈
void StackDestory(Stack* pst)
{
	assert(pst);
	free(pst->_a);
	pst->_a = NULL;
	pst->_top = pst->_capacity = 0;
}
#include "string.h"
bool isValid(char* s) {
    Stack st;
    StackInit(&st);

    
    int n=strlen(s);
    if(n%2!=0)
    return false;

    

    for(int i=0;i<n;i++,s++){
        switch(*s){
            case '(':
            {
                 StackPush(&st,*s);
            }
            break;
            case '[':
            {
                 StackPush(&st,*s);
            }
            break;
            case '{':
            {
                 StackPush(&st,*s);
            }
            break;
            
            case ')':
            {
                if(st._top==0)
                 return false;
                 char m=StackTop(&st);
                 StackPop(&st);
                 if(m!='(')
                 {
                    return false;
                 }
            }
            break;
            case '}':
            {
                if(st._top==0)
                 return false;
                 char m=StackTop(&st);
                 StackPop(&st);
                 if(m!='{')
                 {
                    return false;
                 }
            }
            break;
            case ']':
            {
                if(st._top==0)
                 return false;
                  char m=StackTop(&st);
                 StackPop(&st);
                 if(m!='[')
                 {
                    return false;
                 }
            }
            break;
        }
    }
        
       if(st._top>0)
        {
            return false;
        }
        
        if(StackEmpty(&st)&&*s!='\0')
        return false;
StackDestory(&st);
    return true;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

优思学院|2024年如何成为一名六西格玛黑带?

如果你总是觉得无论多么努力&#xff0c;职场上似乎难以有所突破&#xff0c;那么你应该知道&#xff0c;你并不是孤独的。 实际上&#xff0c;大量研究表明&#xff0c;高达90%的人对自己的工作感到不满&#xff0c;这意味着在你认识的每10人中&#xff0c;可能只有1人对其工…

CMC学习系列 (9):对侧半球可能支持中风后的恢复

对侧半球可能支持中风后的恢复 0. 引言1. 主要贡献2. 方法2.1 患者信息2.2 行为测试2.3 运动任务/实验范式 3. 结果3.1 对照参与者和卒中患者的相干图3.2 地形图上的CMC标签 4. 讨论5. 总结欢迎来稿 论文地址&#xff1a;https://www.sciencedirect.com/science/article/pii/S2…

认识OpenEuler操作系统

引言 在信息技术日新月异的时代&#xff0c;开源软件已成驱动创新的核心动能&#xff0c;其中&#xff0c;OpenEuler作为一款冉冉升起的开源操作系统典范&#xff0c;凭借其对开源精神的坚守与技术创新的不懈追求&#xff0c;自亮相以来便引发了全球关注。本文将全方位深挖Open…

QT文本操作

文本的操作 文本的读写流程 文本的读写流程 // 文本的读写流程// 1.打开文件》打到文本》QFileDialog::getOpenFileName返回的是// 一个字符串&#xff0c;包括了路径文件名字// open()方法打开文本// 2.读写文本// readAll(),readLine(),write()// 3.关闭文本 // close()使用…

2024很漂亮的个人主页HTML源码

源码介绍 很漂亮的个人主页HTML源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面 截图效果 源码下载 很漂亮的个人主页HTML源码

关于运行阿里云直播Demo报的错

flutter --version dart --version 如何使用Flutter框架推流_音视频终端 SDK(Apsara Video SDK)-阿里云帮助中心MediaBox音视频SDK下载指南_音视频终端 SDK(Apsara Video SDK)-阿里云帮助中心 终端输入 dart pub --trace get --no-precompile 打印详细报错信息 详细咨询…

Scrapy框架 进阶

Scrapy框架基础Scrapy框架进阶 【五】持久化存储 命令行&#xff1a;json、csv等管道&#xff1a;什么数据类型都可以 【1】命令行简单存储 &#xff08;1&#xff09;语法 Json格式 scrapy crawl 自定义爬虫程序文件名 -o 文件名.jsonCSV格式 scrapy crawl 自定义爬虫程…

【C#】 删除首/尾部字符

代码 static void Main(string[] args){string str "123abc";string strdelete "abc";string str1 str.Trim(1);string strc str1.Trim(c);string str11 str1.TrimStart(1);string strcc str1.TrimEnd(c);string strabc str.Trim(strdelete.ToCharA…

kylin java.io.IOException: error=13, Permission denied

linux centos7.8 error13, Permission denied_linux open error13-CSDN博客 chmod -R 777 /home/zengwenfeng/kkFileView-4.2.1 2024-04-15 13:15:17.416 WARN 3400 --- [er-offprocmng-1] o.j.l.office.LocalOfficeProcessManager : An I/O error prevents us to determine…

mybatis自制插件+注解实现数据脱敏

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 mybatis自制插件注解实现数据脱敏 前言数据脱敏的实现方式构思从哪个地方进行脱敏&#xff1f;它怎么知道我什么数据需要脱敏 项目实现拦截器实现注解实现枚举实现效果图展示 前言 在数字时代&#x…

C++初识

这里会对一些内容进行简单的提起&#xff0c;后面会详细讲解 一、注释 作用&#xff1a;在代码中加入一些说明和解释&#xff0c;方便自己或其他人阅读代码 两种格式&#xff1a; 1、单行注释&#xff1a; // 描述信息 通常放在一行代码的上方&#xff0c;或者一条语句的末…

LeetCode55题:跳跃游戏(原创)

【题目描述】 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&am…

k8s网络详解

一、Kubernetes网络基础 1、kubernetes的网络层级 节点网络&#xff1a;集群宿主机节点间的网络通信&#xff0c;并且负责打通与集群外部的通讯。pod网络&#xff1a;为集群上的pod提供网络&#xff0c;通过CNI网络插件来完成&#xff0c;如Fannel、Calico、Cilium等。servic…

小米汽车值得去吗?最终拒了 offer。

车企选择 今天逛某职场 App 时&#xff0c;无意间看到一篇寻求 offer 抉择意见的帖子&#xff1a; 这位同学刚从加班闻名&#xff08;但 CEO 强调既学华为狼性&#xff0c;也学华为分配&#xff09;的理想汽车离职。 经过了 6 轮面试&#xff0c;收到了小米 offer&#xff0c;但…

【VTKExamples::Meshes】第十期 Decimation

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例Decimation,并解析接口vtkDecimatePro,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO…

[计算机效率] 时间记录工具:ManicTime

3.24 时间记录工具&#xff1a;ManicTime ManicTime是一款数据收集软件&#xff0c;主要用于记录电脑上各种软件使用所花费的时间以及电脑闲置的时间。用户还可以定制记录某一时间段内的系统活动。 数据收集&#xff1a;ManicTime能够静默运行于后台&#xff0c;自动跟踪并收…

如何检测和避免线程死锁?

在日常开发中涉及到多线程开发时候就很容易会产生死锁 what: 什么是线程死锁? 线程死锁是指两个或两个以上的线程在执行过程中&#xff0c;由于竞争资源或者由于彼此通信而造成的一种阻塞现象。当这些线程互相持有对方所需要的资源时&#xff0c;会互相等待对方释放资源&am…

ssm054班主任助理系统的设计与实现+jsp

班主任助理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本班主任助理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间…

mybatis的一对多

业务&#xff1a;通常主表从表 查询&#xff0c;一对多关系&#xff0c;通常是先查主表&#xff0c;然后拿主表的 关联字段与从表关联。在代码中 通常用for 循环等方法给 从表的数据赋值&#xff0c;很麻烦&#xff0c;&#xff0c;&#xff0c;很麻烦。。。。 用mybatis的…

mac基础操作、快捷、软件快捷方式

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 mac基础操作、快捷、软件快捷方式 前言mac快捷操作快捷查找切换页面页面缩略访达和命令端切换创建文件夹创建文件删除文件/文件夹获取文件的路径移动文件或文件夹复制文件命令端常用命令 前言 主要是方…