第6週目--データ構造--データ構造のかっこの一致(スタック)

2257 ワード

/*
* Copyright (c) 2015,               
*              ( )
* All rights reserved.
*     : listack.cpp
*   :   
*     :2015 10 24 
*    :V1.0.1
*     :windows8.1
*     :            :   、       。
                  ,                    
*     :      
*     :    
*/
#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
typedef char ElemType;
typedef struct
{
    ElemType data[MaxSize];
    int top;                //   
} SqStack;                  //       

void InitStack(SqStack *&s);    //    
bool StackEmpty(SqStack *s);     //     
bool Push(SqStack *&s,ElemType e); //  
bool Pop(SqStack *&s,ElemType &e); //  



void InitStack(SqStack *&s)
{
    s=(SqStack *)malloc(sizeof(SqStack));
    s->top=-1;
}
bool StackEmpty(SqStack *s)
{
    return(s->top==-1);
}
bool Push(SqStack *&s,ElemType e)
{
    if (s->top==MaxSize-1)    //     ,     
        return false;
    s->top++;
    s->data[s->top]=e;
    return true;
}
bool Pop(SqStack *&s,ElemType &e)
{
    if (s->top==-1)     //      ,     
        return false;
    e=s->data[s->top];
    s->top--;
    return true;
}




int main()
{
    char c;
    char st[50];
    int d=1, i;
    SqStack *s;
    InitStack(s);
    printf("      :");
    scanf("%s", st);
    for(i=0; st[i]!='\0'&&d; i++)
    {
        switch(st[i])
        {
        case'(':
        case'[':
        case'{':
            Push(s, st[i]);
            break;
        case')':
            Pop(s, c);
            if(c!='(') d=0;
            break;
        case']':
            Pop(s, c);
            if(c!='[') d=0;
            break;
        case'}':
            Pop(s,c);
            if(c!='{') d=0;
            break;
        }
    }
    if(StackEmpty(s)&&d==1)
        printf("      !!
"); else printf(" !!
"); return 0; }
</pre><pre name="code" class="cpp">      :
<img src="http://img.blog.csdn.net/20151025220906061" alt="" />