【每日OJ—有效的括号(栈)】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

世上有两种耀眼的光芒,一种是正在升起的太阳,一种是正在努力学习编程的你!一个爱学编程的人。各位看官,我衷心的希望这篇博客能对你们有所帮助,同时也希望各位看官能对我的文章给与点评,希望我们能够携手共同促进进步,在编程的道路上越走越远!


提示:以下是本篇文章正文内容,下面案例可供参考

1、有效的括号题目:

1.1方法讲解:

解题思路:

栈的规则:后入先出。我们这道题用栈来解答。

步骤:1、遍历字符串;

2、让字符串中的左括号’(‘,‘[’, ‘{’入栈;

3、如果遇到右括号’)’ ‘]’ ‘}’就出栈,让栈顶出来的左括号与右括号进行匹配。

在对左、右括号匹配时,可能会出现以下几种情况:

1、右括号比左括号多,数量匹配问题,返回false;

2、左括号比右括号多,数量匹配问题,返回false;

3、全是左括号或者全是右括号,数量匹配问题,返回false。

1.2代码实现:

typedef int STDataType;
typedef struct stack
{
	STDataType* a;
	int top;//标识栈顶的位置
	int capacity;
}ST;

//初始化
void STInit(ST* pst);
//销毁
void STDestory(ST* pst);

//压栈
void STPush(ST* pst, STDataType x);
//出栈
void STPop(ST* pst);

//获取栈顶元素
STDataType STTop(ST* pst);

//判空
bool STEmpty(ST* pst);

//统计栈内元素个数
int STSize(ST* pst);

//初始化
void STInit(ST* pst)
{
	assert(pst);
	pst->a = NULL;
	//表示top指向栈顶元素的下一个位置
	pst->top = 0;

	//表示top指向栈顶元素
	//pst->top = -1;

	pst->capacity = 0;
}
//销毁
void STDestory(ST* pst)
{
	assert(pst);
	free(pst->a);
	pst->a = NULL;
	pst->capacity = pst->top = 0;
}

//压栈
void STPush(ST* pst, STDataType x)
{
	assert(pst);
	//判断数组栈空间是否足够
	if (pst->top == pst->capacity)
	{
		int newcapacity = pst->capacity == 0 ? 4 : pst->capacity * 2;
		STDataType* tmp = (STDataType*)realloc(pst->a, sizeof(STDataType) * newcapacity);
		if (tmp == NULL)
		{
			perror("realloc fail");
			return;
		}
		pst->a = tmp;
		pst->capacity = newcapacity;
	}
	pst->a[pst->top] = x;
	pst->top++;
}
//出栈
void STPop(ST* pst)
{
	assert(pst);
	assert(pst->top > 0);
	pst->top--;
}

//获取栈顶元素
STDataType STTop(ST* pst)
{
	assert(pst);
	assert(pst->top > 0);
	return pst->a[pst->top - 1];
}

//判空
bool STEmpty(ST* pst)
{
	assert(pst);
	//判断数组栈为空
	//1、如果top是指向栈顶元素的下一个位置,那当top == 0时,栈为空
	//2、如果top时指向栈顶元素,那当top == -1时,栈为空
	/*if (pst->top == 0)
	{
		return true;
	}
	else
	{
		return false;
	}*/
	return pst->top == 0;
}

//统计栈内元素个数
int STSize(ST* pst)
{
	assert(pst);
	//1、如果top指向栈顶元素的话,栈内元素的个数为top+1;
	//2、如果top指向栈顶元素的下一个位置的话,栈内元素的个数为top;
	return pst->top;
}

bool isValid(char* s) {
    //同一个域里面不能有同一个变量
    ST st;
    STInit(&st);
    while(*s)
    {
        //遍历字符串
        //如果是左括号就入栈
        if(*s == '[' || *s == '(' || *s == '{')
        {
            STPush(&st,*s);
            s++;
        }
        else
        {
            //右括号多,左括号少的数量匹配问题
            if(STEmpty(&st))
            {
                STDestory(&st);
                return false;
            }
            //如果是右括号,就从栈中取出一个左括号来进行匹配
            char top = STTop(&st);
            STPop(&st);

            //顺序不匹配
            if((*s == '}' && top != '{') 
            || (*s == ']' && top != '[')
            || (*s == ')' && top != '('))
            {
                STDestory(&st);
                return false;
            }
            s++;
        }
    }
    //栈为空,返回真,说明数量匹配
    //匹配问题:左括号多,右括号少
    bool ret = STEmpty(&st);
    STDestory(&st);
    return ret;
}


总结

好了,本篇博客到这里就结束了,如果有更好的观点,请及时留言,我会认真观看并学习。
不积硅步,无以至千里;不积小流,无以成江海。

相关推荐

  1. -20.有效括号

    2023-12-21 14:32:03       6 阅读
  2. 应用:20. 有效括号LeetCode

    2023-12-21 14:32:03       16 阅读
  3. 【力扣100】20.有效括号 ||

    2023-12-21 14:32:03       42 阅读
  4. LeetCode_Hot100__20有效括号_Python

    2023-12-21 14:32:03       22 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-21 14:32:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-21 14:32:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-21 14:32:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-21 14:32:03       20 阅读

热门阅读

  1. 数据可视化Seaborn

    2023-12-21 14:32:03       40 阅读
  2. 配置应用到k8s

    2023-12-21 14:32:03       38 阅读
  3. 【Python】—— pandas 数据分析

    2023-12-21 14:32:03       31 阅读
  4. PaddleHub报错解决方法及示例代码

    2023-12-21 14:32:03       39 阅读
  5. BeanDefinitionRegistryPostProcessor 接口的概述

    2023-12-21 14:32:03       37 阅读
  6. 低代码何去何从

    2023-12-21 14:32:03       37 阅读
  7. 对于猜数字游戏改进的心得

    2023-12-21 14:32:03       41 阅读
  8. Web ML 库的Transformers.js 提供文本转语音功能

    2023-12-21 14:32:03       30 阅读
  9. npm run dev 与npm run serve的区别

    2023-12-21 14:32:03       34 阅读
  10. Mysql允许局域网或外部网络访问

    2023-12-21 14:32:03       43 阅读