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

#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

算法描述:如果遇到开放符号就进栈,如果遇到封闭符号,先判断此时是不是空栈,是就报错,否则,就出栈判断是否是其对应的开放符号,不是就报错,如果读到文件结尾,栈不为空,报错

你可能感兴趣的:(应用)