用栈判断输入的括号是否匹配
来源:互联网 发布:petapoco sql 编辑:程序博客网 时间:2024/06/05 10:04
栈是一种很重要的数据结构,用栈我们可以做很多事情,下面简单介绍一种用栈来判断用户输入的括号{}()[]是否匹配的算法。
算法简介:
用户输入的括号只有成对出现且符合一般的书写规范才算合法,比如[{( )}], {( )( )}[ ]都算合法,[( ]), []( }的不算合法。因此我们可以依次读入用户输入的字符串,把出现的'(' '{' '['压入栈中,读到')' '}' 或']'时栈顶元素出栈和它比较,并移动栈顶位置-1,如果匹配则继续,不匹配返回0,如果都匹配,栈最后应该是空的。
因为栈底不会移动,我们构造一个顺序栈,包含栈顶指针,栈底指针和栈的最大空间(判断栈是否满)可以满足我们的要求。
C语言代码:
#include <stdio.h>#include <stdlib.h>#define OK 1#define ERROR 0#define MAX_SIZE 100typedef int status;typedef char Eletype;typedef struct stack{ Eletype *top; Eletype *base; int stacksize;}stack, *pstack;void initStack(pstack);status pop(pstack);status push(pstack, Eletype);status isEmpty(pstack);status isFull(pstack);status march(pstack, Eletype*);Eletype getTop(pstack);int main(void){ stack st; pstack sp; char str[100]; sp = &st; gets(str); initStack(sp); if ( !march(sp, str) ) printf("此表达式括号不匹配!\n"); else printf("表达式合法!\n"); return 0;}void initStack(pstack sp){ sp->base = (Eletype*)malloc( sizeof(Eletype)*MAX_SIZE ); if (!sp->base) exit(-1); sp->top = sp->base; sp->stacksize = MAX_SIZE;}status pop(pstack sp){ if ( isEmpty(sp) ) return ERROR; sp->top--; return OK;}Eletype getTop(pstack sp){ return *(sp->top-1);}status push(pstack sp, Eletype m){ if ( isFull(sp) ) return ERROR; *sp->top = m; sp->top++; return OK;}status isEmpty(pstack sp){ if (sp->base == sp->top) return OK; return ERROR;}status isFull(pstack sp){ return sp->top-sp->base+1 == MAX_SIZE;}status march(pstack ps, Eletype* str){ int i = 0; int flag = 0; char comp; for (i; str[i]!='\0'; i++) { switch (str[i]){ case '[': push(ps, str[i]); break; case '(': push(ps, str[i]); break; case '{': push(ps, str[i]); break; case '}': comp = getTop(ps); pop(ps); if(comp != '{') flag=1; break; case ')': comp = getTop(ps); pop(ps); if(comp != '(') flag=1; break; case ']': comp = getTop(ps); pop(ps); if(comp != '[') flag=1; break; default: break; } if (flag == 1) return 0; } if (isEmpty(ps)) return 1; return 0;}
1 0
- 用栈判断输入的括号是否匹配
- 栈的应用----判断括号是否匹配
- 判断输入的文字花括号是否匹配
- 全部输入是小括号的字符串,判断是否匹配
- 利用栈判断输入的表达式中的括号是否匹配(假设只含有左、右括号)
- 判断括号是否匹配
- 判断括号是否匹配
- 判断括号是否匹配
- 判断括号是否匹配
- 判断字符串里的括号是否匹配
- 左右括号是否匹配用的栈
- 用栈判断表达式中的括号是否匹配
- Matlab 使用栈判断括号是否匹配
- 基于栈判断括号是否匹配
- 利用栈判断括号是否匹配
- 利用栈判断括号是否匹配
- 用 java 判断 括号是否完全匹配
- 使用栈判断输入的表达式中括号是否配对
- poj3255(次短路,好题)
- 【NOIP2015模拟10.20】ACM
- 简单异或加密代码--IOS版(广点通)
- 如何使用eclipse自动调整代码格式
- 浏览器兼容
- 用栈判断输入的括号是否匹配
- 国内当前游戏公司一览
- om.microsoft.sqlserver.jdbc.SQLServerException: 到主机的TCP/IP 连接失败。java.net.ConnectException: Connectio
- Android牛人博客集合
- javascript基础一(变量与函数)
- 图像处理中的数学原理详解(Part4) ——傅立叶级数的概念1
- hdu5505
- Android Lint清除无用的资源文件
- 直接插入排序