基于顺序栈的括号匹配问题c语言代码实现
#include<stdio.h>
#include<stdlib.h>
#define maxsize 10
typedef struct {
char data[maxsize];
int top;
}stack;
void initstack(stack &s)
{
s.top=-1;
}
bool ifempty(stack s)
{
if(s.top==-1)
return true;
else return false;
}
bool push(stack &s ,char &x){
if(s.top==(maxsize-1))
return false;
s.data[++s.top]=x;
return true;
}
bool pop (stack &s,char &x)
{
if(s.top==-1)
return false;
x=s.data[s.top--];
return true;
}
bool bracketcheck(stack &s,char str[], int length){
initstack(s);
for(int i=0;i<length;i++){
if(str[i]=='('||str[i]=='['||str[i]=='{'){
push(s,str[i]);
}
char topelem;
pop(s,topelem);
if(str[i]==')'&&topelem!='(')
return false;
if(str[i]==']'&&topelem!='[')
return false;
if(str[i]=='}'&&topelem!='{')
return false;
}
return ifempty(s);
}
int main(){
stack s;
char str[10];
printf("请输入要检测的括号10个:\n");
char x;
scanf("%c",&x);
for(int i=0;i<10;i++) {
str[i]=x;
scanf("%c",&x);
}
if(bracketcheck(s,str,10))
{
printf("括号匹配\n");
}
else{
printf("括号不匹配\n");
}
return 0;
}
|