您的位置:首页 > 其它

栈的应用--栈用作判断平衡符号,[()]对的,[(])错的

2015-07-02 14:42 393 查看
#include<stdio.h>
#include<stdlib.h>
struct Node;
typedef struct Node *PtrToNode;
typedef PtrToNode Stack;

struct Node{
char Ele;
PtrToNode Next;
};

Stack
CreateStack( void )
{
Stack S;
S = malloc( sizeof( struct Node ) );
if(S == NULL )
printf("out of space");
S->Next = NULL;
return S;
}
void
Push(char ch,Stack S)
{
PtrToNode TmpCell;
TmpCell = malloc(sizeof( struct Node ));
if(TmpCell == NULL)
printf("out of space ");
else
{
TmpCell->Next = S->Next;
S->Next = TmpCell;
TmpCell->Ele = ch;
}
}
int
IsEmpty(Stack S)
{
return S->Next == NULL;
}
void
Pop( Stack S )
{
PtrToNode TmpCell;
TmpCell = S->Next;
S->Next = TmpCell->Next;
free(TmpCell);
}
char
Top( Stack S )
{
return S->Next->Ele;
}

int main()
{
char Tmp;
Stack S;
S = CreateStack();
while( ( Tmp = getchar() ) != '\n' )
{
if(Tmp == '[' || Tmp == '(')
Push(Tmp,S);
else if(Tmp == ']')
{
if( !IsEmpty( S ) )
{
char tmp;
tmp = Top( S );
Pop( S );
if(tmp != '[')
printf("error");
}
else
printf("Error");
}//else if
else
{
if( !IsEmpty( S ) )
{
char tmp;
tmp = Top( S );
Pop( S );
if(tmp != '(')
printf("error");
}
else
printf("error");
}//else
}
if( !IsEmpty( S ))
printf("error");
return 0;
}


View Code
算法描述:如果遇到开放符号就进栈,如果遇到封闭符号,先判断此时是不是空栈,是就报错,否则,就出栈判断是否是其对应的开放符号,不是就报错,如果读到文件结尾,栈不为空,报错
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: