数据结构实验之栈四:括号匹配
来源:互联网 发布:电脑有趣的软件 编辑:程序博客网 时间:2024/06/07 08:34
题目描述
给你一串字符,不超过50个字符,可能包括括号、数字、字母、标点符号、空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配。
输入
输入数据有多组,处理到文件结束。
输出
如果匹配就输出“yes”,不匹配输出“no”
示例输入
sin(20+10){[}]
示例输出
yesno
小贴士:本题因为输入的字符串中可能包括空格,所以在获取字符串时要使用gets( );切记不可用scanf();
算法:每当遇到左括弧让其进栈,如果遇到右括弧,如果此时栈为空则配对失败,输出no,否则输出栈顶元素,并 与该右括弧看是否配对,若失败则输出no并退出循环
如果没有退出循环,并且比较完所有字符时此时栈为空,则证明配对成功,若栈不为空,则失败;
具体源代码
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <malloc.h>#define STACKMAX 100<span style="white-space:pre"></span>//定义初始最大储存容量位100#define STACKCREATE 10<span style="white-space:pre"></span>//每次容量不足时一次增加10/*定义栈的类型*/
typedef struct{ char *top; char *base; int stacksize;}Sqstack;/*建立空表*/int Initstack(Sqstack &S){ S.base=(char *)malloc(STACKMAX*sizeof(char));//重新分配空间; if(!S.base)exit(-1); //分配失败退出程序 S.top=S.base; S.stacksize=STACKMAX; return 1;}/*插入元素的函数(进栈)int Push(Sqstack &S,char e){ if(S.top-S.base>=S.stacksize) { S.base=(char*)realloc(S.base,(STACKCREATE+S.stacksize)*sizeof(char)); if(!S.base)exit(-1); S.top=S.base+S.stacksize; S.stacksize+=STACKCREATE; } *S.top++=e; return 1;}/*出栈并返回栈顶值*/int Pop(Sqstack &S,char &e){ if(S.top==S.base)return 0; e=*--S.top; return 1;}/*Ïú»Ù—£*/void DestroyStack(Sqstack &S){ S.base=S.top;}int main(){ char a[60],e; int i,n; while(gets(a)) { Sqstack S; Initstack(S); n=strlen(a); for(i=0; i<n; i++) { if(a[i]=='('||a[i]=='['||a[i]=='{')//左括弧进栈 { Push(S,a[i]); } else if(a[i]==')'||a[i]==']'||a[i]=='}')//出现右括弧出栈并比较 { if(S.top==S.base)//栈内无左括弧,分配一定失败 { printf("no\n"); break; } Pop(S,e); if((e!='('&&a[i]==')')||(e!='{'&&a[i]=='}')||(e!='['&&a[i]==']')) { printf("no\n"); break; } } } if(i==n) { if(S.top!=S.base) { printf("no\n"); } else printf("yes\n"); } DestroyStack(S); } return 0;}
0 0
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- 数据结构实验之栈四:括号匹配
- Android Studio 插件 CodeGlance 快速定位代码
- 谷歌插件Postman下载安装
- POJ2104 POJ2761 区间第K大 主席树
- ArrayList源码解析 给jdk写注释系列之jdk1.6容器(1)
- 领域特性模块集
- 数据结构实验之栈四:括号匹配
- 二叉树的非递归遍历
- 文件上传(利用oss 和plupload)
- 欢迎使用CSDN-markdown编辑器
- iOS 简易音乐播放界面
- Hive 合并小文件
- 针对Java 四大域对象的汇总
- PHP 操作mongodb api大部分方法
- @GeneratedValue 与 @GenericGenerator