数据结构栈的应用--括号匹配(此代码如何优化)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char a[10009];
//栈的结构体
struct Stack
{
char data[10009];
int top; //栈顶元素
};
struct Stack *s;
//初始化栈
void Init_Stack()
{
s=(struct Stack *)malloc(sizeof(struct Stack));
s->top=-1;
}
//入栈
void In_Stack(char c)
{
s->top++;
s->data[s->top]=c;
}
//取栈尾
void Out_Stack()
{
s->top--;
}
int main()
{
int b;
while(~scanf("%s",a))
{
Init_Stack();
In_Stack(a[0]); //将第一个字符入栈
for(b=1;b<strlen(a);b++) //遍历剩下的字符
{
if((a[b]==')'&&s->data[s->top]=='(')||(a[b]==']'&&s->data[s->top]=='[')||(a[b]=='}'&&s->data[s->top]=='{')||(a[b]=='>'&&s->data[s->top]=='<')) //当栈尾元素与被遍历到的元素匹配时,栈尾出栈
{
Out_Stack();
}
else
{
In_Stack(a[b]); //否则,将该被遍历的元素入栈
}
}
if(s->top==-1)
printf("YESn"); //当栈为空时,说明括号是匹配的
else
printf("NOn"); //否则。。。
}
}
我的程序被判超时了,想问如何优化我的代码
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(11)
子函数使用宏有什么作用
不清楚你需求是什么,子函数可以使用宏。
//初始化栈
#define Init_Stack()
do
{
s=(struct Stack *)malloc(sizeof(struct Stack));
memset(s,0,sizeof(struct Stack));
s->top=-1;
}while(0)
//入栈
#define In_Stack(c) s->data[++s->top]=(c)
//取栈尾
#define Out_Stack() s->top--
学校的测评网站
你怎么测的?
200ms之内,你帮我看看主函数里面for循环里面的内容,看看可以怎么优化?
把压栈,出栈的函数都改成主处理里的处理呢?
回复
还是不行,会不会是我在if这里判断了太多次,因为最多可以有10000个括号,当括号右10000个的时候,可能就超时了
回复
在算法不能优化的时候,就精简指令吧,能看到编译成汇编的情况吧,尽可能地减少指令,这才能快的。
多少时间算不超?没看你的逻辑,尽量减少函数和函数的调用,应该会省出些时间的。
我把你的代码提交了,也是超时,我的代码应该没错吧,只是算法过于繁琐
你好,你的代码也是超时了,我只是不知道该如何优化代码,算法应该是没有问题的