#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <algorithm>
#include <fstream>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <list>
#include <vector>
#include <cmath>
#include <iomanip>
typedef long long LL;
typedef unsigned long long LLU;
const double PI=acos(-1.0);
using namespace std;
#define MAXN 1000+10
#define stack_init_size 100
#define stack_incr_size 10
struct char_id{
char ch;
int id;
};
struct sqstack{
char_id *base;
char_id *top;
int Length;
int stacksize;
};
int init_stack(sqstack &s){
s.base = (char_id *)malloc(stack_init_size*sizeof(char_id));
if(!s.base)
return 0;
s.top = s.base;
s.Length = 0;
s.stacksize = stack_init_size;
return 1;
}
char_id Top(sqstack s){
return *(s.top - 1);
}
int Push(sqstack & s, char_id v){
if(s.top - s.base >= s.stacksize){
s.base = (char_id *)realloc(s.base,(s.stacksize + stack_incr_size));
if(!s.base)
return 0;
s.top = s.base + s.stacksize;
s.stacksize += stack_incr_size;
}
*s.top++ = v;
s.Length++;
return 1;
}
int Pop(sqstack & s){
if(s.top == s.base)
return 0;
*--s.top;
s.Length--;
return 1;
}
int Size(sqstack & s){
return s.Length;
}
int Empty(sqstack & s){
if(s.Length)
return 0;
return 1;
}
int main (){
freopen("sqstack.txt","r",stdin);
char s[MAXN];
sqstack q;
init_stack(q);
int tal = 0;
int flag = 0;
while(gets(s) != NULL){
tal++;
int l = strlen(s);
for(int i = 0; i < l; i++){
if(s[i] == '('){
char_id o;
o.ch = '(';
o.id = tal;
Push(q, o);
}
else if(s[i] == ')'){
if(!Empty(q)){
char_id p = Top(q);
if(p.ch == '(')
Pop(q);
}
else
printf("第 %d 行括号不匹配\n",tal);
}
}
}
while(!Empty(q)){
char_id p = Top(q);
Pop(q);
printf("第 %d 行括号不匹配\n",p.id);
}
return 0;
}
栈的实现-括号匹配
最新推荐文章于 2023-04-21 00:42:23 发布