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

宝宝SAMA的搞笑日常 宝宝SAMA的搞笑日常     2022-08-08     356

关键词:

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

本周的要求:

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]!=;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("
右括号多余!
");
 76                 return ;
 77             }
 78             else{
 79                 GetTop(&S,&ch);
 80                 if(Match(ch,str[i]))
 81                     Pop(&S,&ch);
 82                 else{
 83                     printf("
 对应的左右括号不同类!
");
 84                     return ;
 85                 }
 86             }
 87 
 88         }
 89     }
 90     if(IsEmpty(&S))
 91         printf("
括号匹配!
");
 92     else
 93         printf("
左括号多余!
");
 94 }
 95 
 96 
 97 int main()
 98 {
 99     char strr[50];
100     printf("请输入各种括号
");
101     gets(strr);
102     BracketMatch(strr);
103 
104     return 0;
105 }

用自定义链式栈解决力扣括号匹配问题(代码片段)

...解题思路三、编码实现1、结点2、链式栈3、用链式栈实现括号匹配的判断四、代码执行测试1测试2测试3空字符串测试一、背景在力扣题库中有一道经典的栈表应用问题:有效的括号给定一个只包括‘(‘,‘)‘,‘‘,‘‘,‘[... 查看详情

顺序栈练习题

...部分<?php/***栈的练习题*栈一般是作为一个中介来使用*括号匹配问题*表达式计算*数制转换*递归变非递归*/header(‘Content-Type:text/html;charset=utf-8‘);include‘./Stack.class.php‘;//1.括号匹配/***输出匹配的括号和没有匹配的括号*/functionb 查看详情

如何使用栈来实现括号匹配(代码片段)

题目:给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的(),[],是否匹配。输入格式:输入在一行中给出一行字符串,不超过100个字符,可能包括括号、数字、字母、标点符... 查看详情

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

...、取栈顶元素和判空操作,并基于上述栈的基本操作实现括号匹配算法,完成实验报告的填写,以便加深理解有关栈结构的抽象数据类型等概念,并体会和了解栈结构在日常用户输入操作中的应用价值。     2.... 查看详情

第三章内容总结

...进后出队:先进先出两种线性表一般用在特定的场景。如括号匹配用的是栈;银行排队用的是队列。 本周首先完成了括号匹配,一开始是根据书本打上关于栈的基本操作函数(入栈,出栈)我采用的方法是顺序栈。 首先... 查看详情

用栈实现括号匹配的检验

试验要求:1、设计栈,存储括号。2、利用进栈、出栈操作实现括号匹配算法。3、不另外申请存储空间,算法有较好的性能。4、设计驱动程序、测试用例,并得出正确结果。提示:在表达式中,相同类型的括号(包括:()、[]... 查看详情

20.validparentheses(用栈实现括号匹配)(代码片段)

Givenastringcontainingjustthecharacters ‘(‘, ‘)‘, ‘‘, ‘‘, ‘[‘ and ‘]‘,determineiftheinputstringisvalid.Aninputstringisvalidif:Openbracketsmustbeclosedbythesametype 查看详情

括号匹配算法

1、基于栈的应用 括号匹配算法是栈的一个典型应用;所以的借用栈来实现,保存相应的信息; 算法思想:遇到第一个字符,判断栈空,字符入栈,其后的字符和栈顶元素进行比较,括号匹配的话,则栈顶元素出栈,否... 查看详情

数据结构-栈的使用之括号匹配校验(代码片段)

假设表达式中允许包含两种括号,圆括号和方括号,其嵌套顺序随意,即[()[]]、[([][])]和[]()[]等为正确格式,[(])或([())等均为不正确格式。要求编写一个程序检验括号输入是否正确。实现思路此题我们使用栈的后... 查看详情

括号匹配问题——栈

南阳理工学院oj题解 //括号匹配问题#include<iostream>#include<cstdio>#include<cstdlib>#include<stack>usingnamespacestd;intmain(){ intk,flag=1; charc,*q; chars[10010]; scanf("%d",&k); 查看详情

栈3:括号匹配问题的7道题(代码片段)

​如何判断括号匹配相关的问题是栈的一大典型应用,在LeetCode中至少有7道相关的题目,如下:20.有效的括号856.括号的分数32.最长有效括号678.有效的括号字符串1111.有效括号的嵌套深度1614.括号的最大嵌套深度1541.平... 查看详情

栈和队列

...用栈来依次存储输出的结果,最后依次出栈次序就对了。括号匹配:每读入一个右括号就查看栈顶,如果有左括号就将其出栈,不然就是非法情况,如果读入左括号,就将其入栈。起始结束条件都是栈为空。行编辑问题:表达式... 查看详情

用栈检测括号匹配

出现()[]三种括号,嵌套时不允许出现交叉,且只能大括号嵌套中括号,中括号嵌套小括号,求代码~谢谢中括号和大括号不允许单独出现#include<stdio.h>#include<string.h>#defineMaxSize100typedefcharElemType;//定义数据类型//定义顺... 查看详情

数据结构与算法-使用栈《解决括号匹配问题》(代码片段)

问题描述给定一个字符串,里边可能包含"()"小括号和其他字符,请编写程序检查该字符串的中的小括号是否成对出现。例如:"(上海)(长安)":正确匹配"上海((长安))":正确匹配"上海(长安(... 查看详情

栈的实现及其典型应用(代码片段)

...一些符号是成对匹配出现的,利用栈可以实现类似编译器括号是否匹配的能力。算法思路:&emsp;从第一个字符开始扫描&emsp;当遇见普通字符时忽略,当遇见左符号时压入栈中&emsp;当遇见右符号时从栈中弹出栈顶符号&e... 查看详情

leetcode刷题——括号匹配问题(代码片段)

...C语言刷题很难受的一题,主要用到“栈”的思想。1.括号匹配问题OJ链接给定一个只包括‘(’,’)’,’’,’’,’[’,’]’的字符串s,判断字符串是否有效。有效字符串需满足:左括号必须... 查看详情

数据结构栈的应用——括号匹配问题(代码片段)

括号匹配问题:给一个字符串,其中包含小括号、中括号、大括号,求该字符串中的括号是否匹配。例如:()()[]  匹配([()])  匹配[](        不匹配[(])       不匹配利用... 查看详情

02栈:括号匹配算法

查看详情