利用栈实现括号匹配功能
首先括号匹配的算法很简单,当我们输入左括号时我们将它压入栈,我们输入右括号的时候我们需要进行判断两者是否匹配。即当我们输入右括号的时我们把栈顶(即最近的左括号)判断是否匹配,如果匹配我们将它从栈中弹出最后只要栈为空那我们括号匹配就成功了。
所以我定义了几个函数
1.压入栈的函数
int Push(SqStack &S,char e){
if(S.top – S.base >= S.stacksize){
S.base=(int *)realloc(S.base,S.stacksize+STACKINCREMENT*sizeof(int));
if(!S.base) return -1;
S.top=S.base+S.stacksize;
S.stacksize += STACKINCREMENT;
}
*S.top++ = e;
return 0;
2.判断栈是否为空的函数(只要栈底与栈顶指向同一个位置就可以了)
int StackEmpty(SqStack S){
if(S.base==S.top) return 1;
else
return 0;
}
3.弹出栈顶的函数
int Pop(SqStack &S){
char e;
if(S.top==S.base) return 0;
e= *–S.top;
}
4.获得栈顶元素的函数
char GetTop(SqStack &S){
char e;
if(S.top==S.base) return 0;
e=*(S.top-1);
return e;
}
最后整个程序代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct{
int *base;
int *top;
int stacksize;
}SqStack;
int InitStack(SqStack &S){
S.base=(int*)malloc(STACK_INIT_SIZE * sizeof(int));
if(!S.base) return -1;
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return 0;
}
int Push(SqStack &S,char e){
if(S.top – S.base >= S.stacksize){
S.base=(int *)realloc(S.base,S.stacksize+STACKINCREMENT*sizeof(int));
if(!S.base) return -1;
S.top=S.base+S.stacksize;
S.stacksize += STACKINCREMENT;
}
*S.top++ = e;
return 0;
}
int StackEmpty(SqStack S){
if(S.base==S.top) return 1;
else
return 0;
}
int Pop(SqStack &S){
char e;
if(S.top==S.base) return 0;
e= *–S.top;
}
char GetTop(SqStack &S){
char e;
if(S.top==S.base) return 0;
e=*(S.top-1);
return e;
}
int main()
{
int i,length;
SqStack S;
InitStack(S);
char bracket[100];
printf("请输入括号序列:");
scanf("%s",bracket);
getchar();
length=(int)strlen(bracket);
if(bracket[i]!='{'||bracket[i]!='['||bracket[i]!='('||bracket[i]!='}'||bracket[i]!=']'||bracket[i]!=')'){
printf("请正确输入
");
return 0;
}
for(i=0;i<length;i++)
{
if(bracket[i]=='{'||bracket[i]=='['||bracket[i]=='(')
Push(S,bracket[i]);
if(bracket[i]=='}')
{
GetTop(S)=='{';
Pop(S);
}
if(bracket[i]==']')
{
GetTop(S)=='[';
Pop(S);
}
if(bracket[i]==')')
{
GetTop(S)=='(';
Pop(S);
}
}
if(StackEmpty(S))
printf("括号匹配成功");
else
printf("括号匹配失败");
}
算法可能在某些方面比较繁琐,本人能力有限该算法仅供参考。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/95430.html