使用堆栈实现括号的匹配
来源:互联网 发布:spine3.4 破解版 mac 编辑:程序博客网 时间:2024/05/17 12:25
#include <string.h>
#include<stdio.h>
typedef char DataType;
#define MaxSize 10
typedef struct
{
DataType stack [MaxSize];
int top;
}sstack;
//堆栈的初始化
void StackInit(sstack *s)
{
s->top=0; //定义指针变量,他指向的变量的成员变量为0;
}
//插入数据
int StackInsert(sstack*s,DataType x)
{
if(s->top>MaxSize)
{
printf("堆栈已满不能插如");
return 0;
}
else
{
s->stack[s->top]=x;
s->top++;
return 1;
}
}
//判断堆栈是否为空
int StackNe(sstack s)
{
if(s.top<=0)
{
return 0;
}
else
{
return 1;
}
}
//出栈
int StackDelete(sstack *s,DataType *x)
{
if(s->top<=0)
{
printf("堆栈为空");
return 0;
}
else
{ s->top--;
*x=s->stack[s->top];
return 1;
}
}
//取出栈顶元素
int StackGet(sstack s, DataType *x)
{
if(s.top<0)
{
printf("堆栈为空");
return 0;
}
else
{
*x=s.stack[s.top-1];
return 1;
}
}
//函数实现括号的匹配
void pipei(char ele[],int n)
{ int i;
sstack mystack;
char c;
//初始化栈
StackInit(&mystack);
for(i=0;i<n;i++)
{
//如果是左括号则入栈
if((ele[i]=='{')||(ele[i]=='[')||(ele[i]=='('))
{
StackInsert(&mystack,ele[i]) ;
}
//如果是有括号则进行匹配,如果不是空的而且是在栈顶则出栈,说明他们是匹配的。
else if((ele[i])==')'&&StackNe(mystack)&&StackGet(mystack,&c)&&c=='(')
{
//如果是匹配的则出栈
StackDelete(&mystack,&c);
printf("()\t");
}
else if((ele[i])==')'&&StackNe(mystack)&&StackGet(mystack,&c)&&c!='(')
{
printf("括号匹配不正确\n");
return ;
//如果是匹配的则出栈
StackDelete(&mystack,&c);
//printf("括号是匹配的");
printf("[] \t");
}
else if((ele[i])==']'&&StackNe(mystack)&&StackGet(mystack,&c)&&c!='[')
{
printf("括号匹配不正确 \n");
return ;
}
//{{{{{{{{{{{{}}}}}}}}}}}}}}}}}}}}{{{{{{{{{{{{{{{{{{{{{{}}}}}}}}}}}}
else if((ele[i])=='}'&&StackNe(mystack)&&StackGet(mystack,&c)&&c=='{')
{
//如果是匹配的则出栈
StackDelete(&mystack,&c);
//printf("括号匹配真确 \n");
printf("{} \t");
}
else if((ele[i])=='}'&&StackNe(mystack)&&StackGet(mystack,&c)&&c!='{')
{
printf("括号匹配不正确 \n");
return ;
}
else if((ele[i]==')')||(ele[i]==']')||(ele[i]=='}')&&!StackNe(mystack))
{
printf("右括号多于左括号! \n");
}
}
if(StackNe(mystack))
{
printf("左括号多于右括号! \n");
}
else
{
printf("括号匹配正确!\n");
}
}
int main ()
{
char a[]={'{','[','(',')',']','}'} ;
char b[]={'{','{','[','(',')',']','}'};
pipei(b,10);
return 0;
}
#include<stdio.h>
typedef char DataType;
#define MaxSize 10
typedef struct
{
DataType stack [MaxSize];
int top;
}sstack;
//堆栈的初始化
void StackInit(sstack *s)
{
s->top=0; //定义指针变量,他指向的变量的成员变量为0;
}
//插入数据
int StackInsert(sstack*s,DataType x)
{
if(s->top>MaxSize)
{
printf("堆栈已满不能插如");
return 0;
}
else
{
s->stack[s->top]=x;
s->top++;
return 1;
}
}
//判断堆栈是否为空
int StackNe(sstack s)
{
if(s.top<=0)
{
return 0;
}
else
{
return 1;
}
}
//出栈
int StackDelete(sstack *s,DataType *x)
{
if(s->top<=0)
{
printf("堆栈为空");
return 0;
}
else
{ s->top--;
*x=s->stack[s->top];
return 1;
}
}
//取出栈顶元素
int StackGet(sstack s, DataType *x)
{
if(s.top<0)
{
printf("堆栈为空");
return 0;
}
else
{
*x=s.stack[s.top-1];
return 1;
}
}
//函数实现括号的匹配
void pipei(char ele[],int n)
{ int i;
sstack mystack;
char c;
//初始化栈
StackInit(&mystack);
for(i=0;i<n;i++)
{
//如果是左括号则入栈
if((ele[i]=='{')||(ele[i]=='[')||(ele[i]=='('))
{
StackInsert(&mystack,ele[i]) ;
}
//如果是有括号则进行匹配,如果不是空的而且是在栈顶则出栈,说明他们是匹配的。
else if((ele[i])==')'&&StackNe(mystack)&&StackGet(mystack,&c)&&c=='(')
{
//如果是匹配的则出栈
StackDelete(&mystack,&c);
printf("()\t");
}
else if((ele[i])==')'&&StackNe(mystack)&&StackGet(mystack,&c)&&c!='(')
{
printf("括号匹配不正确\n");
return ;
}
else if((ele[i])==']'&&StackNe(mystack)&&StackGet(mystack,&c)&&c=='[')
{//如果是匹配的则出栈
StackDelete(&mystack,&c);
//printf("括号是匹配的");
printf("[] \t");
}
else if((ele[i])==']'&&StackNe(mystack)&&StackGet(mystack,&c)&&c!='[')
{
printf("括号匹配不正确 \n");
return ;
}
//{{{{{{{{{{{{}}}}}}}}}}}}}}}}}}}}{{{{{{{{{{{{{{{{{{{{{{}}}}}}}}}}}}
else if((ele[i])=='}'&&StackNe(mystack)&&StackGet(mystack,&c)&&c=='{')
{
//如果是匹配的则出栈
StackDelete(&mystack,&c);
//printf("括号匹配真确 \n");
printf("{} \t");
}
else if((ele[i])=='}'&&StackNe(mystack)&&StackGet(mystack,&c)&&c!='{')
{
printf("括号匹配不正确 \n");
return ;
}
else if((ele[i]==')')||(ele[i]==']')||(ele[i]=='}')&&!StackNe(mystack))
{
printf("右括号多于左括号! \n");
}
}
if(StackNe(mystack))
{
printf("左括号多于右括号! \n");
}
else
{
printf("括号匹配正确!\n");
}
}
int main ()
{
char a[]={'{','[','(',')',']','}'} ;
char b[]={'{','{','[','(',')',']','}'};
pipei(b,10);
return 0;
}
- 使用堆栈实现括号的匹配
- 不用堆栈实现的括号匹配
- 自定义堆栈,实现括号匹配
- 15数组实现顺序堆栈的括号匹配问题
- 用堆栈来实现括号匹配的比较
- 面试算法:使用堆栈判断括号的匹配
- 算法复习--------------利用堆栈实现括号匹配
- 考研数据结构与算法之堆栈的使用(三)利用堆栈匹配括号
- 堆栈--括号匹配检验
- 使用栈实现括号匹配
- 用堆栈实现括号匹配——ADT实现
- 1153 堆栈的使用 括号匹配 表达式求值 (对输入表达式的处理)
- 题目1153:括号匹配问题(2010年北京大学计算机研究生机试真题,堆栈的使用)
- 判断表达式括号是否匹配,C语言堆栈实现
- Python 使用堆栈验证C文件括号是否匹配
- 栈的实现-括号匹配
- 使用栈的链式表示,实现括号匹配检测。
- 括号匹配(不用堆栈)
- 第四周13/03/31
- 关于多线程学习总结(四) 锁
- [每日一题] OCP1z0-047 :2013-07-19 Rules of Precedence――括号的使用.................8
- UITableView的常用方法与示例
- 爱上IFTTT无法自拔 --[建立你的网络服务秘书]
- 使用堆栈实现括号的匹配
- TPS和QPS的区别
- android开发中常用到的设置
- 将json合适字符串转换为json对象
- 做个文艺的IT人员——今日工作总结-2013.07.18
- QT入门笔记--信号和槽(附简单的C++类实现代码)
- [联通版] [ROM][9502][联通原版][I9502ZNUAMDH][ZNUAMDI][ZNUAME3]五件套
- 用户 NT AUTHORITY\NETWORK SERVICE 登录失败 解决方法 (MS SQL 2005)
- Combinations(组合)