栈部分的代码
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 100
typedef struct SqStack{
char data[MaxSize];
int top;
}brackets;
void InitStack(brackets *p){
p->top = -1;
}
bool Push(brackets *p,char x){
if(p->top == MaxSize-1)
return false;
p->top = p->top+1;
p->data[p->top] = x;
return true;
}
bool Pop(brackets *p,char &x){
if(p->top == -1)
return false;
x=p->data[p->top];
p->top = p->top-1;
return true;
}
bool printStack(brackets *p){
int topp = p->top;
while(p->top != -1){
printf("%c ",p->data[p->top]);
p->top = p->top--;
}
printf("\n");
p->top = topp;
return true;
}
void bracktspair(brackets *p){
char a[100];
int len=0;
for(int i=0;i<100;i++){
scanf("%c",&a[i]);
if(a[i]=='\n')
break;
else
Push(p,a[i]);
len=len++;
}
}
int main(){
brackets p;
InitStack(&p);
bracktspair(&p);
printStack(&p);
return 0;
}
测试栈部分 成功
完整代码
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 100
typedef struct SqStack{
char data[MaxSize];
int top;
}brackets;
void InitStack(brackets *p){
p->top = -1;
}
bool Push(brackets *p,char x){
if(p->top == MaxSize-1)
return false;
p->top = p->top+1;
p->data[p->top] = x;
return true;
}
bool Pop(brackets *p,char &x){
if(p->top == -1)
return false;
x=p->data[p->top];
p->top = p->top-1;
return true;
}
bool printStack(brackets *p){
int topp = p->top;
while(p->top != -1){
printf("%c ",p->data[p->top]);
p->top = p->top--;
}
printf("\n");
p->top = topp;
return true;
}
void bracktspair(brackets *p){
//数据输入数组中
int tag=1; //当为1时,没毛病 为0时,错误
char a[100];
int len=0;
for(int i=0;i<100;i++){
scanf("%c",&a[i]);
if(a[i]=='\n')
break;
else
//Push(p,a[i]); //测试栈好不好使
len=len++;
}
//括号比较 并压入栈
for(int j=0;j<len;j++){
if(a[j]=='('||a[j]=='{'||a[j]=='[')
Push(p,a[j]);
else
{
char top;
Pop(p,top);
if(top=='['&&a[j]==']')
tag=1;
else if(top=='('&&a[j]==')')
tag=1;
else if(top=='{'&&a[j]=='}')
tag=1;
else
tag=0;
}
}
if(tag==1)
printf("没毛病\n");
else
printf("错误\n");
}
int main(){
brackets p;
InitStack(&p);
bracktspair(&p);
return 0;
}