括号匹配问题(顺序栈实现)

Posted 宝宝SAMA的搞笑日常

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了括号匹配问题(顺序栈实现)相关的知识,希望对你有一定的参考价值。

本周老师作业留了两个。先上传一个吧。那个有时间我再传上来~

本周的要求:

1.给出顺序栈的存储结构定义。
2.完成顺序栈的基本操作函数。
1)      初始化顺序栈
2)      实现入栈和出栈操作
3)      实现取栈顶元素和判空操作
括号匹配问题
3.编写主函数实现基本操作函数功能,并设置测试数据,测试合法和非法数据的输出结果。
4.程序调试运行并保存输出结果。
5.整理并提交实验作业。
  1 #include <cstdio>
  2 #include <cstring>
  3 #define Stack_Size 50
  4 
  5 typedef struct 
  6 {
  7     char a[Stack_Size];
  8     int top;
  9 }SeqStack;
 10 
 11 int IsEmpty(SeqStack *S)//栈判空
 12 {
 13     return S->top == -1;
 14 }
 15 
 16 int Match(char ch1,char ch2)//字符串匹配
 17 {
 18     switch(ch2){
 19     case ):
 20         if(ch1==()
 21             return 1;
 22         break;
 23     case }:
 24         if(ch1=={)
 25             return 1;
 26         break;
 27     case ]:
 28         if(ch1==[)
 29             return 1;
 30         break;
 31     }
 32     return 0;
 33 }
 34 
 35 void InitStack(SeqStack * S)//初始化顺序栈
 36 {
 37     S->top = -1;
 38 }
 39 
 40 void Push(SeqStack * S,char x)//进栈
 41 {
 42     S->top++;
 43     S->a[S->top]=x;
 44 }
 45 
 46 void Pop(SeqStack * S,char *x)//出栈
 47 {
 48     *x=S->a[S->top];
 49     S->top--;
 50 }
 51 
 52 void GetTop(SeqStack * S,char *x)
 53 {
 54     *x=S->a[S->top]; 
 55 }
 56 
 57 
 58 void BracketMatch(char *str)
 59 {
 60     SeqStack S;
 61     char ch;
 62     InitStack(&S);
 63     for(int i=0;str[i]!=\0;i++)
 64     {
 65         switch(str[i]){
 66         case (:
 67         case[:
 68         case{:
 69             Push(&S,str[i]);
 70             break;
 71         case ):
 72         case]:
 73         case}:
 74             if(IsEmpty(&S)){
 75                 printf("\n右括号多余!\n");
 76                 return ;
 77             }
 78             else{
 79                 GetTop(&S,&ch);
 80                 if(Match(ch,str[i]))
 81                     Pop(&S,&ch);
 82                 else{
 83                     printf("\n 对应的左右括号不同类!\n");
 84                     return ;
 85                 }
 86             }
 87 
 88         }
 89     }
 90     if(IsEmpty(&S))
 91         printf("\n括号匹配!\n");
 92     else
 93         printf("\n左括号多余!\n");
 94 }
 95 
 96 
 97 int main()
 98 {
 99     char strr[50];
100     printf("请输入各种括号\n");
101     gets(strr);
102     BracketMatch(strr);
103 
104     return 0;
105 }

以上是关于括号匹配问题(顺序栈实现)的主要内容,如果未能解决你的问题,请参考以下文章

用自定义链式栈解决力扣括号匹配问题

用自定义链式栈解决力扣括号匹配问题

Java 栈 如何实现括号匹配

数据结构 栈的实例应用,括号匹配

栈的应用(括号匹配算法实战)

顺序栈练习题