首页 > 编程知识 正文

栈怎么算(括号匹配算法C语言)

时间:2023-05-04 07:38:31 阅读:77108 作者:740

/**思路: *左括号扫描时进入堆栈*右括号扫描时判断堆栈是否为空match false *否则,如果弹出堆栈的第一个元素与当前扫描的括号不匹配,则match false 当确定堆栈中是否存在元素时,match false返回true */# include stdio.h # include stdlib.h # include stdbool.h//链堆栈结构typedef struct 结构堆栈*下一步; }节点; 初始化堆栈node * init堆栈(node * top ) top=malloc (sizeof ) node ); 顶下一个=空; 返回顶; }是否要堆栈空的boolisempty(node*top ) { return top-next==NULL? 真:假; }/堆栈操作node*pushstack(node*top,char data ) node*newnode=malloc ) sizeof (node ); 新节点-数据=数据; 新节点-下一个=null; 新节点-下一个=top-next; 顶下一个=新节点; 返回顶; }/堆栈操作node*popstack(node*top,char *popElement ) if (isempty ) top ) { return top; } node *popNode=top-next; *popElement=popNode-data; 顶下一个=pop node -下一个; 自由(pop node ); 返回顶; }/匹配算法intmatchbracket(node*top ) { char popElement; char i; printf(input: ); do{scanf('%c ',I ); if(I=='n ' ) { break; }交换机(I ) (case ) (:case ) ) ) :推堆) top,I ); 布雷克; case ']': case '}': case ' ) ' :if(isempty(top ) )打印(匹配假! n '; 返回- 1; } popstack (顶,popElement ); if () popelement==' ) I!=' ) ' (|(popelement=='['I!=']'(|(popelement=='{'I!='} ' ) (printf('matchfalse! n '; 返回- 1; } break; }while(I!='n '; if(isempty(top ) ) printf ) '匹配真!' ); 返回0; }else{printf('matchfalse!' ); 返回- 1; } }初始化}}int main ()//堆栈node * top=init堆栈(top ); 匹配中断(top; 返回0; }

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