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

沈阳科技网站建设丹东网站建设平台

沈阳科技网站建设,丹东网站建设平台,钓鱼转转网站在线生成,专业网站建设企业网站制作题目描述 分析 我们刚上来的思路可能是:找出这三种括号的个数 如果都是偶数 说明匹配 但是这里还有一个顺序问题 比如 " )( "这样是不匹配的! 所以这种思路不可取! 我们想 如果遇到左括号,把他读到一个顺序表中&#…

题目描述

在这里插入图片描述

分析

我们刚上来的思路可能是:找出这三种括号的个数
如果都是偶数 说明匹配
但是这里还有一个顺序问题 比如 " )( "这样是不匹配的!
所以这种思路不可取!

我们想 如果遇到左括号,把他读到一个顺序表中,然后遇到匹配的右括号就把他放出来,也就相当于对对碰
比如 " { [ ( ) ] } " 我们会把 { [ ( 读到一个顺序表里
然后依次让( ) [ ] { }对对碰消掉,如果最后顺序表中没有元素是不是说明就匹配呢?
这里我们就考虑使用 栈!
因为栈只有压栈和出栈,十分符合这道题

代码

由于想省事,我就直接把之前写的栈的实现给搬到了题目中
其实 写几个有用的接口就可以 没必要都写

typedef int STDataType;
typedef struct Stack {//动态开辟数组STDataType* a;int top;//栈顶int capacity;//容量
}ST;
//初始化
void StackInit(ST* ps);
//压栈
void StackPush(ST* ps, STDataType x);
//出栈
void StackPop(ST* ps);
//获取栈中有效元素个数
int StackSize(ST* ps);
//显示栈顶元素
STDataType StackTop(ST* ps);
//检测栈是否为空
bool StackEmpty(ST* ps);
//销毁
void StackDestory(ST* ps);//初始化
void StackInit(ST* ps)
{assert(ps);ps->a = NULL;ps->capacity = ps->top = 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->a,sizeof(STDataType) * newCapacity);if (tmp == NULL){printf("realloc fail");exit(-1);}ps->capacity = newCapacity;ps->a = tmp;}ps->a[ps->top] = x;ps->top++;
}
//出栈
void StackPop(ST* ps)
{assert(ps);assert(ps->top >= 0);//只需要ps--就可以了ps->top--;}
//获取栈中有效元素个数
int StackSize(ST* ps)
{assert(ps);return ps->top;
}
//获取栈顶元素
STDataType StackTop(ST* ps)
{assert(ps);return ps->a[ps->top-1];
}
//检测栈是否为空
bool StackEmpty(ST* ps)
{assert(ps);return ps->top == 0;
}
//销毁
void StackDestory(ST* ps)
{assert(ps);free(ps->a);ps->a = NULL;//ps->a 不用了 所以置空就可以了ps->capacity = ps->top = 0;
}bool isValid(char * s){ST st;StackInit(&st);// 左括号入栈,右括号出栈while(*s){//如果是左括号 那么入栈if((*s=='{') ||(*s=='(') || (*s=='[')){StackPush(&st,*s);++s;//判断完这一次 向后走}else{//如果上面的if没有执行 说明第一个就是右括号那么 肯定不匹配if(StackEmpty(&st)){//异常情况返回需要先销毁栈 否则容易造成内存泄漏StackDestory(&st);return false;}char ch=StackTop(&st);//获取栈顶元素if ((ch=='{' && *s=='}')//匹配是哪一种情况|| (ch== '[' && *s==']')|| (ch=='(' && *s==')')){StackPop(&st);//如果满足一对括号匹配那么出栈!++s;}else//如果不匹配 返回false{//返回之前防止内存泄漏 要销毁栈StackDestory(&st);return false;}}}//利用临时变量判断是否为空,为空说明都读走了 否则说明有不匹配的!bool ret=StackEmpty(&st);//销毁--防止内存泄漏!StackDestory(&st);return ret;
}
http://www.yayakq.cn/news/632496/

相关文章:

  • 华为怎么设置安全网站视频制作网站怎么做
  • 招工做哪个网站商业空间设计调研
  • 网站建设策划案谈谈你在建设主题资源网站时
  • 重庆专业网站推广费用上海市建设项目施工审图网站
  • 厦门优化网站排名wordpress仿阿里主题
  • Wordpress源码下载站监理工程师
  • 做网站的流程百科做购物网站骗人
  • 哪个网站是专门为建设方服务的app开发报价单
  • 河南科技园网站建设免费代运营
  • 网站如何更换服务器成全视频免费观看在线看
  • 三晋联盟做网站需要多钱湘潭学校网站建设 磐石网络第一
  • 怎么做网站文件验证网站首页设计及运行效果
  • 大连科技官方网站网站页面设计需求文档
  • 长春精神文明建设网站上海网络seo优化公司
  • 那个外贸网站做的好app和网站
  • 南昌市做网站公司如何做网站标题
  • 厦门新闻头条最新消息天津网站建设seo优化
  • 关键词优化除了做网站还有什么方法网站建设服务合同书
  • 江苏城乡建设厅网站湖北企业网站建设哪家好
  • 常用的网站语言西安网站开发huanxi
  • 高并发电商网站开发中国设计
  • 强的网站建设公司排名西宁建设工程官方网站
  • 网站建设文化市场广告设计公司市场专员
  • 有没有专门做儿童房的网站wordpress网站后缀HTML
  • 新网站建设方案淘宝导航里的链接网站怎么做
  • 百度建网站多少钱下载京东购物商城app
  • 建筑公司网站设计详情手机网站 域名
  • 济南网站忧化网站如何做死链接提交
  • 南昌企业网站建设公司国际新闻最新消息10条
  • 福州建设工程协会网站查询怎样制作3d立体效果图