生活随笔
收集整理的這篇文章主要介紹了
数据结构实验之栈与队列四:括号匹配
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Description
給你一串字符,不超過50個字符,可能包括括號、數字、字母、標點符號、空格,你的任務是檢查這一串字符中的( ) ,[ ],{ }是否匹配。
Input
輸入數據有多組,處理到文件結束。
Output
如果匹配就輸出“yes”,不匹配輸出“no”
Sample
Input
sin(20+10)
{[}]
Output
yes
no
#include<bits/stdc++.h>using namespace std
;#define intsize 100000
#define addsize 100000typedef char elemtype
;typedef struct
{elemtype
*base
;elemtype
*top
;int stacksize
;
} Sqstack
;int initstack(Sqstack
&s
)
{s
.base
= (elemtype
*)malloc(intsize
*sizeof(elemtype
));if(!s
.base
)return -1;s
.top
= s
.base
;s
.stacksize
= intsize
;return 0;
}int bian(elemtype n
)
{int flag
;if(n
== '(')flag
= 1;if(n
== '[')flag
= 2;if(n
== '{')flag
= 3;if(n
== ')')flag
= 4;if(n
== ']')flag
= 5;if(n
== '}')flag
= 6;return flag
;
}int push(Sqstack
&s
, int x
)
{if(s
.top
- s
.base
> s
.stacksize
){s
.base
= new elemtype
[intsize
+ addsize
];if(!s
.base
)return -1;s
.top
= s
.base
+ addsize
;s
.stacksize
+= addsize
;}*s
.top
++ = x
;return 0;
}elemtype
pop(Sqstack
&s
)
{elemtype x
;return x
= *--s
.top
;
}int main()
{Sqstack s
;char a
[55], ch
;int n
, flag
;while(gets(a
)){initstack(s
);flag
= 1;n
= strlen(a
);for(int i
= 0; i
< n
; i
++){ch
= a
[i
];if(ch
== '(' || ch
== '[' || ch
== '{')push(s
, bian(ch
));else if(ch
== ')' || ch
== ']' || ch
== '}'){if(s
.top
== s
.base
){flag
= 0;break;}else if(bian(ch
) - pop(s
) != 3) {flag
= 0;break;}}}if(s
.top
!= s
.base
)flag
= 0;if(flag
)printf("yes\n");elseprintf("no\n");}return 0;
}
總結
以上是生活随笔為你收集整理的数据结构实验之栈与队列四:括号匹配的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。