#include<stdio.h>
#include<string>
#include<iostream>
#include<malloc.h>
using namespace std;
typedef struct Lnode
{
char data;
struct Lnode *next;
}Lnode;
void init(Lnode *&s)
{
s = (Lnode *)malloc(sizeof(Lnode));
s->next =NULL;
}
void push(Lnode *&s,char str)
{
Lnode *p =(Lnode *)malloc(sizeof(Lnode));
p->data = str;
p->next = s->next;
s->next = p;
}
int isempty(Lnode *&s)
{
Lnode *p =s;
if(p->next==NULL)
return 1;
return 0;
}
int pop(Lnode *&s)
{
Lnode *temp;
if(isempty(s))
return 0;
temp = s->next;
s->next = temp->next;
free(temp);
return 1;
}
int gethead(Lnode *&s)
{
return s->next->data;
}
int main()
{
char a[100];
int n;
cin>>n;
for(int i = 0;i<n;i++)
{
cin>>a[i];
// cout<<a[i];
}
Lnode *s;
init(s);
int flag = 1;
for(int i = 0;i<n;i++)
{
if(a[i]=='('||a[i]=='['){
push(s,a[i]);
//cout<<s->next->data<<" ffaf"<<endl;
}
else if(a[i]==']'&&!isempty(s)&&flag == 1)
{
char ans =gethead(s);
//cout<<ans<<endl;
if(ans=='['){
pop(s);
// cout<<s->next->data<<endl;
}
else flag = 0;
}
else if(a[i]==')'&&!isempty(s)&&flag == 1)
{
char ans =gethead(s);
if(ans=='(')
pop(s);
else flag = 0;
}
}
if(isempty(s)&&flag==1)
cout<<"匹配"<<endl;
else cout<<"不匹配"<<endl;
return 1;
#include<string>
#include<iostream>
#include<malloc.h>
using namespace std;
typedef struct Lnode
{
char data;
struct Lnode *next;
}Lnode;
void init(Lnode *&s)
{
s = (Lnode *)malloc(sizeof(Lnode));
s->next =NULL;
}
void push(Lnode *&s,char str)
{
Lnode *p =(Lnode *)malloc(sizeof(Lnode));
p->data = str;
p->next = s->next;
s->next = p;
}
int isempty(Lnode *&s)
{
Lnode *p =s;
if(p->next==NULL)
return 1;
return 0;
}
int pop(Lnode *&s)
{
Lnode *temp;
if(isempty(s))
return 0;
temp = s->next;
s->next = temp->next;
free(temp);
return 1;
}
int gethead(Lnode *&s)
{
return s->next->data;
}
int main()
{
char a[100];
int n;
cin>>n;
for(int i = 0;i<n;i++)
{
cin>>a[i];
// cout<<a[i];
}
Lnode *s;
init(s);
int flag = 1;
for(int i = 0;i<n;i++)
{
if(a[i]=='('||a[i]=='['){
push(s,a[i]);
//cout<<s->next->data<<" ffaf"<<endl;
}
else if(a[i]==']'&&!isempty(s)&&flag == 1)
{
char ans =gethead(s);
//cout<<ans<<endl;
if(ans=='['){
pop(s);
// cout<<s->next->data<<endl;
}
else flag = 0;
}
else if(a[i]==')'&&!isempty(s)&&flag == 1)
{
char ans =gethead(s);
if(ans=='(')
pop(s);
else flag = 0;
}
}
if(isempty(s)&&flag==1)
cout<<"匹配"<<endl;
else cout<<"不匹配"<<endl;
return 1;
}