码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构 栈的应用——括号匹配的检验

时间:2016-04-11 10:20:49      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:

  1 #include <stdio.h>
  2 #include <malloc.h>
  3 #include <stdlib.h>
  4 #include <math.h>
  5 
  6 #define STACK_INIT_SIZE    100        //存储空间初始分配量
  7 #define STACKINCREMENT     10        //存储空间分配增量
  8 #define SElemType        char     //当前数据类型
  9 
 10 typedef struct
 11 {
 12     SElemType *base;        //栈底指针;
 13     SElemType *top;        //栈顶指针
 14     int stacksize;                    //当前已分配的存储空间
 15 }SqStack;
 16 
 17 SqStack InitStack()
 18 {
 19     SqStack S;
 20     S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));
 21     if(!S.base)
 22     {
 23         printf("CREATE ERROR!\n");
 24         exit(OVERFLOW);            //OVERFLOW定义于math.h文件中,其值为3,exit函数定义在stdlib.h中
 25     }
 26     S.top = S.base;
 27     S.stacksize = STACK_INIT_SIZE;
 28     return S;
 29 }
 30 
 31 int StackEmpty(SqStack S)
 32 {
 33     if(S.top == S.base)
 34     {
 35         return 1;
 36     }
 37     else
 38     {
 39         return 0;
 40     }
 41 }
 42 
 43 SElemType GetTop(SqStack S)
 44 {
 45     if(S.top == S.base)
 46     {
 47         return 0;
 48     }
 49     else
 50     {
 51         return *(S.top - 1);
 52     }
 53 }
 54 
 55 SqStack Push(SqStack S, SElemType e)
 56 {
 57     if(S.top - S.base >= S.stacksize)
 58     {
 59         S.base = (SElemType*)realloc(S.base,(S.stacksize + STACKINCREMENT) * sizeof(SElemType));
 60         if(!S.base)
 61         {
 62             printf("ERROR\n");
 63             exit(OVERFLOW);        //OVERFLOW定义于math.h文件中,其值为3,exit函数定义在stdlib.h中
 64         }
 65         S.top = S.base + S.stacksize;
 66         S.stacksize += STACKINCREMENT;
 67     }
 68     else
 69     {
 70         *(S.top++) = e;
 71     }
 72         return S;
 73 }
 74 
 75 SqStack Pop(SqStack S)
 76 {
 77     if(S.top == S.base)
 78     {
 79         printf("NULL\n");
 80         return S;
 81     }
 82     else
 83     {
 84         S.top--;
 85         return S;
 86     }
 87 }
 88 
 89 int main()
 90 {
 91     SqStack S = InitStack();
 92     char c;
 93     while(1)
 94     {
 95         scanf("%c",&c);
 96         if(c == [ || c == ] || c == ( || c == ) || c == { || c == })
 97         {
 98             if(c == ])
 99             {
100                 if(GetTop(S) == [)
101                 {
102                     S = Pop(S);
103                 }
104             }
105             else if(c == ))
106             {
107                 if(GetTop(S) == ()
108                 {
109                     S = Pop(S);
110                 }
111             }
112             else if(c == })
113             {
114                 if(GetTop(S) == {)
115                 {
116                     S = Pop(S);
117                 }
118             }
119             else
120             {
121                 S = Push(S,c);
122             }
123         }
124         else
125         {
126             break;
127         }
128     }
129     
130     if(StackEmpty(S))
131     {
132         printf("YES!\n");
133     }
134     else
135     {
136         printf("NO!\n");
137     }
138 
139 }

 

数据结构 栈的应用——括号匹配的检验

标签:

原文地址:http://www.cnblogs.com/yangsh1996/p/5377152.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!