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


    #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() ) != '
    ' )
        {
            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

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

  • 相关阅读:
    这一段
    转安装vs2003 提示重启
    转解决VSS中Access to file "rights.dat" denied的错误
    C# 页面基类
    C#密码加密
    转 如何改变*.sln文件的路径
    后台为按钮定义js事件
    sql2005 数据库还原
    vss 代码管理器
    转 如何有效的使用C#读取文件 及如何解决中文乱码问题
  • 原文地址:https://www.cnblogs.com/gabygoole/p/4616033.html
Copyright © 2020-2023  润新知