数据结构括号匹配问题 栈c语言_数据结构c语言版题库

数据结构括号匹配问题 栈c语言_数据结构c语言版题库c语言/c++(数据结构篇) 之 括号匹配检验实例(栈和队列)(4/7)实验目的及要求:熟悉掌握利用栈完成括号是否匹配的检验。实验内容:利用栈完成括号匹配检验。目的:掌握栈的后进先出原则在解决实际问题中

c语言/c++(数据结构篇) 之 括号匹配检验实例(栈和队列)(4/7)   实验目的及要求:   熟悉掌握利用栈完成括号是否匹配的检验。   实验内容:   利用栈完成括号匹配检验。   目的:掌握栈的后进先出原则在解决实际问题中的应用。   内容:输入一组括号,构造栈,利用栈判断所输入的括号是否匹配,并能够输出匹配、多左括号、多右括号三种不同结果。   对输入的任意个非负十进制数,打印出与其值相等的八进制数。   具体实现过程:   1、以数组表达顺序栈,用来存放将要输入的括号;   2、通过栈底指针的不同取值区分不同情况;   3、对函数进行连接。   4、基本要求:检验有圆括号出现的情况;深入分析:检验同时出现圆括号、方括号和花括号的情况。   实验步骤与程序:   #include<stdio.h>   #include<stdlib.h>   typedef struct   {   int *base;   int *top;   int size;   }sqstack;   sqstack initstack()   {   sqstack s;   s.base=(int *)malloc(100*sizeof(int));   s.top=s.base;   return s;   }   sqstack push(sqstack s,int e)   {   *(s.top)=e;   s.top++;   return s;   }   int gettop(sqstack s)   {   if(s.base==s.top)   {   return 0;   }   return *(s.top-1);   }   sqstack pop(sqstack s)   {   s.top–;   return s;   }   void print(sqstack s)   {   while(gettop(s)!=0)   {   printf(“%d   ”,gettop(s));   s=pop(s);   }   }   int main()   {   sqstack s;   char c=’ ‘;   s=initstack();   printf(“请输入括号,以#结束   ”);   while(c!=’#’)   {   scanf(“%c”,&c);   switch (c)   {   case ‘(‘:s=push(s,1);break;   case ‘[‘:s=push(s,2);break;   case ‘{‘:s=push(s,3);break;   case ‘)’:   {   if(gettop(s)==0)   {   printf(“多了*)*   ”);   return 0;   }   else if(gettop(s)==1)   {   s=pop(s);   }   else   {   printf(“括号不匹配!   ”);   return 0;   }   };break;   case ‘]’:   {   if(gettop(s)==0)   {   printf(“多了*]*   ”);   return 0;   }   else if(gettop(s)==2)   {   s=pop(s);   }   else   {   printf(“括号不匹配!   ”);   return 0;   }   };break;   case ‘}’:   {   if(gettop(s)==0)   {   printf(“多了*}*   ”);   return 0;   }   else if(gettop(s)==3)   {   s=pop(s);   }   else   {   printf(“括号不匹配!   ”);   return 0;   }   };break;   default:break;   }   }   if(s.top==s.base)   {   printf(“括号匹配   ”);   }   else   {   printf(“多了左括号   ”);   }   return 0;   }   运行结果:   
数据结构括号匹配问题 栈c语言_数据结构c语言版题库   结果分析与讨论:   1. 我们可以利利用栈的特点即后进先出的特点来实现括号匹配的检验,存储括号字符的数组通过malloc实现动态分配长度,每读入一个括号,若是左括号,则直接进栈,等待相匹配的同类右括号;若读入的是右括号,且与当前栈顶左括号同类型,则二者匹配,将栈顶的左括号弹出,否则属于不合法情况。另外。如果输入序列已经读完,而栈中仍有等待匹配的左括号,或者读入一个右括号,而栈中已无等待匹配的同类型左括号,均属于不匹配的情况。

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

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

(0)
上一篇 2024年 9月 1日 上午8:20
下一篇 2024年 9月 1日

相关推荐

关注微信