摘要:当我们输入(,),{,},[,],等符号时,经常要检查它们的正确性。
(1)利用栈可以完成这个问题,当遇到一个左括号(,{,[,入栈,遇到右符号,出栈,如果出栈的元素不满足匹配,则说明不平衡.
(2)尽管基本思路简单,但是考虑的如果要判断不平衡的原因(比如“(”多了),或者输入了一些错误的符号也要处理,以及像/* */等有两个字符的符号等细节问题,代码还是不容易写的太简洁.
// chap3_平衡符号的检验_stack.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "malloc.h"
#include "stdlib.h"
#define Empty -1
#define not_matched 0
#define matched 1
#define error -3
#define not_empty -4
typedef struct StackRecord *Stack;
struct StackRecord
{
int Cpapcity;
int TopStack;
char *Array;
};
Stack CreateStack(int MaxElements)
{
Stack S;
S = (Stack)malloc(sizeof( StackRecord));
S->Array = (char*)malloc(sizeof(char)*MaxElements);
S->TopStack = -1;
S->Cpapcity = MaxElements;
return S;
}
void Push(Stack S,char X)
{
if(S->TopStack >= S->Cpapcity-1)
{
puts("cannot push an elements into a full stack");
return;
}
else
S->Array[++S->TopStack] = X;
}
<