括号匹配的检验数据结构流程图

括号匹配的检验数据结构流程图栈的应用-括号匹配的检验1、算法描述在括号匹配算法中定义int flag = 1变量来标记匹配结果是成功还是失败!2、具体代码如下——————————————————————————————————————————————————//括号匹配算法#include

栈的应用-括号匹配的检验   1、算法描述   在括号匹配算法中定义int flag = 1变量来标记匹配结果是成功还是失败!   2、具体代码如下   ——————————————————————————————————————————————————   //括号匹配算法   #include<stdio.h>   #include<stdlib.h> //malloc函数的头文件   #define MaxSize 20   #include   using namespace std;   #define OK 1;   #define ERROR 0;   //结构体定义   typedef struct{   char *data; //存储空间的基地址   int top; //栈顶指针记录下标   }SqStack;   ——————————————————————————————————————————————————   //初始化栈   void InitStack(SqStack &s){   s.data = (char *) malloc(sizeof(char)*MaxSize);   s.top = -1;   }   ——————————————————————————————————————————————————   //判断栈是否为空   int SqStackIsEmpty(SqStack s) {   if (s.top == -1)   return OK; //栈空   return ERROR; //栈不为空   }   ——————————————————————————————————————————————————   //入栈操作   void Push(SqStack &s,char c){   if(s.top == MaxSize – 1) //栈满   printf(“栈满!   ”);   s.top = s.top + 1;   s.data[s.top] = c;   }   ——————————————————————————————————————————————————   //出栈操作   void Pop(SqStack &s, char &c){   if(SqStackIsEmpty(s))   printf(“栈空!   ”);   c = s.data[s.top];   s.top = s.top – 1;   }   ——————————————————————————————————————————————————   //括号匹配函数   void bracketCheck(char str[], int length){   SqStack s;   InitStack(s);   int flag = 1; //标志是否匹配成功   for(int i = 0; i<length;i++){   if(str[i] == ‘(’ || str[i] == ‘[’ || str[i] == ‘{’){   Push(s,str[i]); //从左到右扫描,遇见左括号就执行入栈操作   }   else if(str[i] == ‘)’ || str[i] == ‘]’ || str[i] == ‘}’){ //遇见右括号判断栈中符号   if(!SqStackIsEmpty(s))   {   char topElem;   Pop(s,topElem);   if(str[i] == ‘)’ && topElem != ‘(’){   flag = 0;   printf(“匹配失败,第 %d 个右括号 %c 与栈顶符号 %c 不匹配   ”,i+1,str[i],topElem);   }   if(str[i] == ‘]’ && topElem != ‘[’){   flag = 0;   printf(“匹配失败,第 %d 个右括号 %c 与栈顶符号 %c 不匹配   ”,i+1,str[i],topElem);   }   if(str[i] == ‘}’ && topElem != ‘{’){   flag = 0;   printf(“匹配失败,第 %d 个右括号 %c 与栈顶符号 %c 不匹配   ”,i+1,str[i],topElem);   }   }   else {   printf(“   匹配失败,第 %d 个是单身右括号 %c   ”,i+1,str[i]); //栈空,存在单身右括号   flag = 0;   }   }   }   if(SqStackIsEmpty(s) && flag == 1){   printf(“   匹配成功!!!   ”);   }   else printf(“   匹配失败!!!   ”);   }   ——————————————————————————————————————————————————   //主函数   int main(){   char str[MaxSize] = “0”; //字符数组初始化0   //puts(str);   printf(“请输入您要判断的表达式: ”);   gets(str);   printf(“   ”);   bracketCheck(str,MaxSize);   }   ——————————————————————————————————————————————————   3、核心代码   ——————————————————————————————————————————————————   //括号匹配函数   void bracketCheck(char str[], int length){   SqStack s;   InitStack(s);   int flag = 1; //标志是否匹配成功   for(int i = 0; i<length;i++){   if(str[i] == ‘(’ || str[i] == ‘[’ || str[i] == ‘{’){   Push(s,str[i]); //从左到右扫描,遇见左括号就执行入栈操作   }   else if(str[i] == ‘)’ || str[i] == ‘]’ || str[i] == ‘}’){ //遇见右括号判断栈中符号   if(!SqStackIsEmpty(s))   {   char topElem;   Pop(s,topElem);   if(str[i] == ‘)’ && topElem != ‘(’){   flag = 0;   printf(“匹配失败,第 %d 个右括号 %c 与栈顶符号 %c 不匹配   ”,i+1,str[i],topElem);   }   if(str[i] == ‘]’ && topElem != ‘[’){   flag = 0;   printf(“匹配失败,第 %d 个右括号 %c 与栈顶符号 %c 不匹配   ”,i+1,str[i],topElem);   }   if(str[i] == ‘}’ && topElem != ‘{’){   flag = 0;   printf(“匹配失败,第 %d 个右括号 %c 与栈顶符号 %c 不匹配   ”,i+1,str[i],topElem);   }   }   else {   printf(“   匹配失败,第 %d 个是单身右括号 %c   ”,i+1,str[i]); //栈空,存在单身右括号   flag = 0;   }   }   }   if(SqStackIsEmpty(s) && flag == 1){   printf(“   匹配成功!!!   ”);   }   else printf(“   匹配失败!!!   ”);   }   ——————————————————————————————————————————————————   4、代码演示   
在这里插入图片描述   
在这里插入图片描述   
在这里插入图片描述   5、算法分析   此算法从头到尾扫描整个算式表达式中的每一个字符,若算式表达式的字符串长度是n,该算法的时间复杂度为O(n)。算法在运行时所占用的辅助空间主要取决于OPTR栈和OPAD栈的大小,显然他们的空间大小之和不会超过n,所以该算法的空间复杂度也是O(n)

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/81842.html

(0)
上一篇 2024年 7月 29日 上午10:14
下一篇 2024年 7月 29日 上午10:18

相关推荐

关注微信