数据结构 括号匹配问题 (栈 C语言)
2017-10-08 22:59
344 查看
现在,有一行括号序列,请你检查这行括号是否配对。输入数据保证只含有"[","]","(",")"四种字符输出如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
代码如下
#include<stdio.h>
#include<stdlib.h>
#define SIZE 20
#define CREMENT 10
typedef struct{
char *base;
int top;
int stacksize;
}SqStack;
//初始化
void InitStack(SqStack &S){
S.base=(char *)malloc(SIZE*sizeof(char));
if(!S.base) return ;
S.top=0;
S.stacksize=SIZE;
}
//判空
int StackEmpty(SqStack &S){
if(S.top==0) return 1;
else return 0;
}
//入栈
void Push(SqStack &S,char e){
if(S.top>=S.stacksize){
S.base=(char *)realloc(S.base,(S.stacksize+CREMENT)*sizeof(char));
if(!S.base) exit(0);
S.stacksize+=CREMENT;
}
S.base[S.top++]=e;
}
//出栈
void Pop(SqStack &S,char &e){
if(S.top==0) exit(0);
else
e=S.base[--S.top];
}
//括号匹配
int AllBrackets_Test(char *str) {
char *p,ch;
SqStack S;
InitStack(S);
for(p=str;*p;p++){
if(*p=='(' || *p=='[' || *p=='{')
Push( S, *p );
else if(*p==')' || *p==']' || *p=='}'){
if(StackEmpty(S)) return 0;
Pop( S,ch );
if( *p==')' && ch!='(') return 0;
if( *p==']' && ch!='[') return 0;
if( *p=='}' && ch!='{') return 0; //不匹配返回0
}
}
if(StackEmpty(S)) //栈为空则匹配
{printf("匹配!\n") ;
return 0;
}
else
printf("不匹配!\n");
}
int main(){
char a[100];
printf("输入一串括号:\n");
gets(a);
AllBrackets_Test(a);
return 0;
}
代码如下
#include<stdio.h>
#include<stdlib.h>
#define SIZE 20
#define CREMENT 10
typedef struct{
char *base;
int top;
int stacksize;
}SqStack;
//初始化
void InitStack(SqStack &S){
S.base=(char *)malloc(SIZE*sizeof(char));
if(!S.base) return ;
S.top=0;
S.stacksize=SIZE;
}
//判空
int StackEmpty(SqStack &S){
if(S.top==0) return 1;
else return 0;
}
//入栈
void Push(SqStack &S,char e){
if(S.top>=S.stacksize){
S.base=(char *)realloc(S.base,(S.stacksize+CREMENT)*sizeof(char));
if(!S.base) exit(0);
S.stacksize+=CREMENT;
}
S.base[S.top++]=e;
}
//出栈
void Pop(SqStack &S,char &e){
if(S.top==0) exit(0);
else
e=S.base[--S.top];
}
//括号匹配
int AllBrackets_Test(char *str) {
char *p,ch;
SqStack S;
InitStack(S);
for(p=str;*p;p++){
if(*p=='(' || *p=='[' || *p=='{')
Push( S, *p );
else if(*p==')' || *p==']' || *p=='}'){
if(StackEmpty(S)) return 0;
Pop( S,ch );
if( *p==')' && ch!='(') return 0;
if( *p==']' && ch!='[') return 0;
if( *p=='}' && ch!='{') return 0; //不匹配返回0
}
}
if(StackEmpty(S)) //栈为空则匹配
{printf("匹配!\n") ;
return 0;
}
else
printf("不匹配!\n");
}
int main(){
char a[100];
printf("输入一串括号:\n");
gets(a);
AllBrackets_Test(a);
return 0;
}
相关文章推荐
- 数据结构-C语言括号匹配问题(栈和计数方式两种思想)
- C语言括号匹配问题
- 用c语言用栈编程的括号匹配问题
- 【数据结构_栈_Stack_0962】括号匹配问题
- 用C++链式栈解决数据结构中的括号匹配问题。
- 括号的匹配(c语言数据结构)
- 数据结构(8)--栈的应用之行编辑程序、括号匹配检验、数制转换、hanio塔问题
- C语言实现括号匹配问题
- C语言数据结构-桟——括号的匹配检验
- 括号匹配问题 栈的应用 C语言实现
- 用堆栈解决括号匹配问题(C语言)
- 数据结构(18)栈典型问题之C++实现括号匹配
- (C语言)括号匹配问题
- 数据结构---C语言数据结构3.2.2括号匹配
- 【数据结构】 利用栈求解 括号匹配问题
- 数据结构13: 括号匹配算法及C语言实现
- C语言数据结构之模式匹配字符串定位问题
- C语言数据结构之利用栈进行括号匹配的检验
- C语言 括号匹配问题
- 数据结构中的栈,在解决很多问题都有用处,比如括号匹配,迷宫求解,表达式求值等等 java中有封装好的类,可以直接调用。