//这时利用了栈的特点
#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
typedef struct SqList{
ElemType data;
struct SqList *next;
}SqList;
typedef SqList *LinkList;
//初始化
int InsiList(LinkList &s)
{
s = NULL;
return 1;
}
//入栈
int Push(LinkList &s,ElemType e)
{
LinkList p;
p = (LinkList)malloc(sizeof(SqList));
if(!p)
{
return 0;
}
p -> data = e;
p -> next = s;
s = p;
return 1;
}
//出栈
int Pop(LinkList &s,ElemType &e)
{
if(s == NULL)
{
return 0;
}
LinkList q;
e = s -> data;
q = s;
s = s -> next;
free(q);
return 1;
}
//取栈顶
char Get(LinkList s)
{
return s -> data;
}
int main()
{
LinkList s;
int i = 0;
char a[258];
if(InsiList(s))
{
printf("初始化成功\n");
printf("请输入:");
scanf("%s",a);
Push(s,'#');
while(a[i] != '\0')
{
switch(a[i])
{
case '(':
Push(s,a[i]);
i ++;
break;
case ')':
if(Get(s) == '(')
{
i ++;
break;
}
else
{
printf("有误\n");
exit(0);
}
case '#':
if(Get(s) != '#')
{
printf("有误\n");
exit(0);
}
i ++;
break;
default:
i ++;
}
}
}
printf("正确\n");
}
方法二
#include <stdio.h>
#define N 100
int main()
{
char E[N] = "(1+2)+(2+1#";
int i = 0;
int j = 0,k = 0;
while(E[i] != '#')
{
//printf("%c\n",E[i]);
if(E[i] == '(')
{
j ++;
}
if(E[i] == ')')
{
k ++;
}
i ++;
}
if(j != k)
{
printf("不能成功\n");
}
else
{
printf("可以\n");
}
}