1. 程式人生 > >括號配對問題1

括號配對問題1

turn ces ID typedef lse tac pre types amp

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define Stack_size 10000
  4. typedef struct{
  5. char elem[Stack_size];
  6. int top;
  7. } SeqStack;
  8. void InitStack (SeqStack *S) {
  9. S->top = -1;
  10. }
  11. int IsEmpty (SeqStack *S) {
  12. if (S->top == -1) return 1;
  13. else
  14. return 0;
  15. }
  16. int Push (SeqStack *S,char x) {
  17. if(S->top == Stack_size-1) return 0;
  18. S->top++;
  19. S->elem[S->top] = x;
  20. return 0;
  21. }
  22. int GetTop (SeqStack *S,char *x) {
  23. if (S->top == -1) return 0;
  24. else {
  25. *x=S->elem[S->top];
  26. return 1;
  27. }
  28. }
  29. int Pop (SeqStack *S,char *x) {
  30. if (S->top == -1) return 0;
  31. else {
  32. *x=S->elem[S->top];
  33. S->top--;
  34. return 0;
  35. }
  36. }
  37. int Match (char a,char b){
  38. if (a+1==b||a+2==b) return 1;
  39. else
  40. return 0;
  41. }
  42. int BracketMatch (char *str){
  43. SeqStack S;int i;char ch;
  44. InitStack (&S);
  45. for (i=0; str[i]!=‘\0‘; i++){
  46. switch (str[i]) {
  47. case ‘(‘:
  48. case ‘[‘:
  49. case ‘{‘:
  50. Push (&S,str[i]);
  51. break;
  52. case ‘)‘:
  53. case ‘]‘:
  54. case ‘}‘:
  55. if (IsEmpty (&S) ){
  56. printf("No\n");
  57. return 0;
  58. }
  59. else {
  60. GetTop (&S,&ch);
  61. if (Match(ch,str[i]))
  62. Pop (&S,&ch);
  63. else{
  64. printf("No\n");
  65. return 0;
  66. }
  67. }
  68. }
  69. }
  70. if (IsEmpty (&S) )
  71. printf("Yes\n");
  72. else
  73. printf("No\n");
  74. return 0;
  75. }
  76. int main(){
  77. int n;
  78. char a[10000];
  79. scanf("%d",&n);
  80. while (n--){
  81. scanf("%s",a);
  82. BracketMatch (a);
  83. }
  84. return 0;
  85. }

括號配對問題1