前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >栈的应用习题:有效的括号

栈的应用习题:有效的括号

作者头像
用户11458826
发布2025-01-23 16:43:37
发布2025-01-23 16:43:37
2100
代码可运行
举报
文章被收录于专栏:杀马特杀马特
运行总次数:0
代码可运行

即浅学栈的创建后,可以简单利用其性质(先进后出,后进先出)来完成对一些题目的解答

如:

一·解题思路:

这里我们可以创建个栈,利用出入栈方式与括号匹配方式类似来解答:

下面对它思路简单分析一下:

二·对解答代码分析:

三·解答代码展示:
代码语言:javascript
代码运行次数:0
复制
typedef int typedata;
typedef struct stack {
	typedata* a;
	int top;
	int capacity;
 } ST;

void STinit(ST* p) {
	assert(p);
	p->a = NULL;
	p->capacity = p->top = 0;
}
void STpush(ST* p,typedata x) {
	assert(p);
	//扩容
	if (p->top == p->capacity) {
		int newcapacity = p->capacity == 0 ? 4 : (p->capacity) * 2;
		typedata* tmp = (typedata*)realloc(p->a, sizeof(typedata)*newcapacity);
		if (tmp == NULL) {
			perror("realloc");
			return;
		}
		p->a = tmp;
		p->capacity = newcapacity;

	}
	p->a[p->top] = x;
	p->top++;
}
void STpop(ST* p) {
	assert(p);
	assert(p->top);
	p->top--;


}

typedata STTop(ST* p) {
	assert(p);
	assert(p->top);
	return p->a[p->top - 1];

}
bool STempty(ST* p) {
	assert(p);
	return p->top == 0;
}
int STsize(ST* p) {
	assert(p);
	return p->top;
}
void STdestroy(ST* p) {
	assert(p);
	free(p->a);
	p->a = NULL;
	p->capacity = p->top = 0;
}

//上方为创建栈



bool isValid(char* s) {
    ST m;
    STinit(&m);
    while(*s){
        if(*s=='('||*s=='['||*s=='{'){
             STpush(&m,*s);

        }//如果是左括号,就把它放入栈
        else{
            ///这里判断栈是否为空,为空则无法与右括号匹配,false
            if(STempty(&m)){
                STdestroy(&m);
                return false;
            }
            ///不为空的话,就匹配,由于要判断都符合需要都满足条件,而不合适的话一次就可以输出false,故判断不匹配
            char top=STTop(&m);
             STpop(&m);
            if(top=='('&&*s!=')'||
            top=='['&&*s!=']'||
              top=='{'&&*s!='}'){
                 STdestroy(&m);
                  return false;
            }
        }
        s++;
    }///为了可以释放掉开辟的空间,故首先保存返回值,然后销毁栈,最后输出
    bool ret=STempty(&m);
     STdestroy(&m);
     return ret;

}

好的,今天分析到此,预知后事如何,请听下回分解。☺☺☺♥♥♥

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一·解题思路:
    • 二·对解答代码分析:
      • 三·解答代码展示:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档