//括号匹配
#define ElementType char
struct StackNode
{
ElementType data;
int Length;
struct StackNode* pNext;
};
typedef struct StackNode *Stack;
Stack CreateStack()
{
Stack MyStack = (Stack)malloc(sizeof(struct StackNode));
MyStack->pNext = NULL;
MyStack->Length = 0;
return MyStack;
}
void Push(Stack S,ElementType data)
{
Stack TmpCell = (Stack)malloc(sizeof(struct StackNode));
TmpCell->data = data;
TmpCell->pNext = S->pNext;
S->pNext = TmpCell;
}
ElementType Pop(Stack S)
{
if (S->pNext==NULL)
{
printf("Empty\n");
exit(0);
}
Stack Temp;
Temp = S->pNext;
S->pNext = Temp->pNext;
ElementType T = Temp->data;
free(Temp);
return T;
}
ElementType GetTop(Stack S)
{
if (!S->pNext)
{
printf("Empty\n");
exit(0);
}
Stack Temp;
Temp = S->pNext;
ElementType T = Temp->data;
return T;
}
int main()
{
Stack S1 = CreateStack();
char ch[20];
printf("请输入括号个数:\n");
int n = 0;
scanf("%d", &n);
printf("请输入表达式\n");
scanf("%s", ch);
int i = 0;
char need;
int flag = 0;
for (i; i < n;i++)
{
switch (ch[i])
{
case '[':
{
need = ']';
Push(S1, need);
S1->Length++;
break;
}
case '(':
{
need = ')';
Push(S1, need);
S1->Length++;
break;
}
case ']':
{
if (GetTop(S1) == ']')
{
ElementType T = Pop(S1);
S1->Length--;
}
else
{
flag = 1;
}
break;
}
case ')':
{
if (GetTop(S1) == ')')
{
ElementType T = Pop(S1);
S1->Length--;
}
else
{
flag = 1;
}
break;
}
default:
{
flag = 1;
break;
}
}
}
if (S1->Length==0&&flag==0)
printf("匹配成功\n");
else
printf("不匹配\n");
}
栈的括号匹配 C语言
猜你喜欢
转载自blog.csdn.net/qq_41750725/article/details/79947375
今日推荐
周排行