首页 > 编程知识 正文

数据结构括号匹配顺序栈(栈实现括号匹配)

时间:2023-05-05 16:32:33 阅读:77163 作者:732

1、有关调用c语言堆栈括号匹配算法部分函数的信息,请参见https://blog.csdn.net/QQ _ 50504109/article/details/120330818

一起努力兄弟姐妹们! 快走,快走

/**思想简单,左括号进入堆栈,遇到右括号时,提取堆栈顶部元素进行匹配,处理不用结果的*括号匹配算法: *匹配可能失败: * 1,左括号多于括号:此处字符组数尚未扫描* 2,右括号大于右括号:此时出现堆栈,剩下的字符数组已扫描完毕; * 3、左括号和右括号不是同一类型。 (/# include stdio.h # include ' instancesqestack.c ' int main ) { voidbreacketmatch } sqestack * s,chestack ) s char str [ SqeStack *s=InitStack (; 中断匹配(s,str ); }voidbreacketmatch(sqestack*s,char *str ) intmatch (char left,char rigth ); char x=' '; //x是用于记录堆栈内容//字符转义数组结束的标记,遇到“”,退出条件时请输入str[i]!=' '哦; for(intI=0; str[i]!=' '; I )交换机(str[I] case ) ) :case () :case ) ) :push ) s,str [ I ]; 布雷克; //由于仅左括号也需要放在堆栈中,所以上面三行下面写的是case ' () :case ' )、case )、if(isempty () )、空则1 printf ()、右n '; 返回; }else{pop(s,x ); (if )匹配(x,str[i] ) /如果匹配成功,则可以什么都不做。 要说为什么,那是因为我是首发堆栈) else(printf ) )左右括号类型的匹配不成功! n '; 返回; } } } } //必须判断到底,上面只有两种情况,所以我们判断了。 左括号中的额外if(isempty(s ) )还缺一个。 ({ printf ) )匹配成功! n '; (else ) printf ) )左括号额外匹配! n '; }intmatch(charleft,char rigth )//判断左右括号是否为同一类型的if ) left==' ) (rigth==' ) ) { return 1; }elseif(left=='['rigth=='] ' ) { return 1; }elseif(left=='{'rigth=='} ' ) { return 1; }else{ return 0; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。