數據結構之括號匹配問題的解決


經過這幾天的思索,終於完成了括號匹配問題算法的實現,不多說,把代碼獻出來,有問題請大家多指教

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #define STACK_INIT_SIZE 100
 4 #define STACKINCREMENT  10
 5 typedef char SElemType;
 6 
 7 typedef struct {
 8        SElemType   *base;  //棧底
 9        SElemType   *top;   //棧頂
10        int   stacksize;    //當前可用最大容量
11 }SqStack;
12 
13 void InitStack (SqStack &S){
14     S.base=(SElemType*)malloc(STACK_INIT_SIZE  *sizeof(SElemType));
15     if (!S.base) exit (0); //存儲分配失敗
16     S.top = S.base;
17     S.stacksize = STACK_INIT_SIZE;
18 }
19 
20 void Push (SqStack &S, SElemType e) {
21    if (S.top - S.base >= S.stacksize) {//棧滿,追加存儲空間
22       S.base = (SElemType *) realloc ( S.base,
23            (S.stacksize + STACKINCREMENT) * sizeof (SElemType));
24        if (!S.base) exit (0); //存儲分配失敗
25        S.top = S.base + S.stacksize;
26        S.stacksize += STACKINCREMENT;
27    }
28    *S.top=e;
29    S.top++;
30    
31  }
32 
33 
34 void Pop (SqStack &S, SElemType &e) {
35      // 若棧不空,則刪除S的棧頂元素,
36      // 用e返回其值,並返回OK;
37      // 否則返回ERROR
38     if (S.top == S.base) exit(0);
39     
40     --S.top;
41     e=*S.top;
42 }
43 
44 
45 
46 void GetTop (SqStack S, SElemType &e) {
47 // 若棧不空,則用e返回S的棧頂元素,並返回OK;否則返回ERROR
48     if (S.top == S.base) exit(0);
49     e = *(S.top-1);
50 }
51 
52 
53 void main( ){
54     SqStack s;
55     SElemType e,ch;
56     int flag=1;
57    InitStack(s);
58    ch=getchar();
59    while(ch!='#'&&flag){
60           switch(ch){
61             case'[': Push(s,ch);break;
62             case'(':Push(s,ch);break;
63             case ']' : 
64                 if(s.top !=s.base){
65                     GetTop(s,e);
66                     if(e='['){
67                     Pop(s,e);
68                     flag=1;
69                 }
70                 else flag=0;
71                 }
72                 else exit(0);
73                 break;
74             case ')' :
75                 if(s.top!=s.base){
76                     GetTop(s,e);
77                     if(e=='('){
78                     Pop(s,e);
79                     flag=1;
80                     }
81                 else flag=0;
82                 }
83                 else exit(0);
84                 break;
85 
86             default :break;  
87           }
88           scanf(" %c",&ch);
89          
90      }
91   if(flag==1)
92       printf("YES");
93   else printf("NO");
94 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM