判别给定表达式中所含括号是否正确配对出现的算法
2014-04-25 23:30
288 查看
假设一个算术表达式中可以包含三种括号:圆括号"(" 和")",方括号"["和"]"和花括号"{"和"}",且这三种括号可按任意的次序嵌套使用(如:…[…{…}…[…]…]…[…]…(…)…)。编写判别给定表达式中所含括号是否正确配对出现的算法。
顺序表类型定义如下:
可使用的相关类型和函数:
实现函数如下:
Status MatchCheck(SqList exp)
/* 顺序表exp表示表达式; */
/* 若exp中的括号配对,则返回TRUE,否则返回FALSE */
{
Stack s;
SElemType c;
ElemType *p = exp.elem;
int state = 0;
InitStack(s);
while(p < exp.elem + exp.length){
if(*p == '{' || *p == '[' || *p == '('){
Push(s,*p);//遇到"("或者"["或者"{"将其压入栈
}
else if(*p == '}' || *p == ']' || *p == ')'){
if(StackEmpty(s))return FALSE;//此时栈为空,即前面不再有"("或者"["或者"{",后面继续出现")"或者"]"或者"}",则返回FALSE
GetTop(s,c);
switch(c){ //匹配栈顶元素
case '(' : {
if(*p == ')'){
Pop(s,c);
state = 1;
break;
}
else return FALSE;
}
case '[' : {
if(*p == ']'){
Pop(s,c);
state = 1;
break;
}
else return FALSE;
}
case '{' : {
if(*p == '}'){
Pop(s,c);
state = 1;
break;
}
else return FALSE;
}
}
}
p++;
}
if(StackEmpty(s))state = 1;//栈内元素完全被匹配完
else state = 0;
if(state == 1)return TRUE;
else return FALSE;
}
顺序表类型定义如下:
typedef struct { ElemType *elem; int length; int listsize; } SqList; // 顺序表Stack是一个已实现的栈。
可使用的相关类型和函数:
typedef char SElemType; // 栈Stack的元素类型 Status InitStack(Stack &s); Status Push(Stack &s, SElemType e); Status Pop(Stack &s, SElemType &e); Status StackEmpty(Stack s); Status GetTop(Stack s, SElemType &e);
实现函数如下:
Status MatchCheck(SqList exp)
/* 顺序表exp表示表达式; */
/* 若exp中的括号配对,则返回TRUE,否则返回FALSE */
{
Stack s;
SElemType c;
ElemType *p = exp.elem;
int state = 0;
InitStack(s);
while(p < exp.elem + exp.length){
if(*p == '{' || *p == '[' || *p == '('){
Push(s,*p);//遇到"("或者"["或者"{"将其压入栈
}
else if(*p == '}' || *p == ']' || *p == ')'){
if(StackEmpty(s))return FALSE;//此时栈为空,即前面不再有"("或者"["或者"{",后面继续出现")"或者"]"或者"}",则返回FALSE
GetTop(s,c);
switch(c){ //匹配栈顶元素
case '(' : {
if(*p == ')'){
Pop(s,c);
state = 1;
break;
}
else return FALSE;
}
case '[' : {
if(*p == ']'){
Pop(s,c);
state = 1;
break;
}
else return FALSE;
}
case '{' : {
if(*p == '}'){
Pop(s,c);
state = 1;
break;
}
else return FALSE;
}
}
}
p++;
}
if(StackEmpty(s))state = 1;//栈内元素完全被匹配完
else state = 0;
if(state == 1)return TRUE;
else return FALSE;
}
相关文章推荐
- 【数据结构基础】判别给定的表达式所含括号是否正确配对出现的算法。
- 一个判别表达式中开、闭括号是否配对出现的算法
- 设计一个算法判别用字符串表示的表达式中开、闭括号是否配对出现
- 假设表达式中允许包括3中括号:(,[,{,设计一个算法采用顺序栈判断表达式中的括号是否正确配对
- 假设表达式中包含三种括号 圆括号方括号大括号 设计一个算法用顺序栈判断表达式中的括号是否正确配对
- 利用顺序栈实现:判别表达式中括弧是否正确配对(BracketMatch函数)
- “链栈”判断表达式中的括号是否正确配对
- Java - - 判断表达式中的括号是否正确配对
- “顺序栈”判断表达式中的括号是否正确配对
- 括号配对:假设一个数学算式中包括圆括号"()",方括号”[]"和花括号“{}”三种类型,编写一算法判断表达式的括号是否配对。
- 假设一个数学算法中包括圆括号(),方括号[],花括号{}三种类型,编写表达式的括号是否配对
- 编写算法判别给定二叉树是否为完全二叉树。
- 用堆栈实现给定数学表达式括号是否匹配 推荐
- 采用邻接表存储结构,编写一个判别无向图中任意给定的两个顶点之间是否存在一条长度为k的简单路径的算法。
- 数据结构复习——链栈的一些操作以及表达式中的括号是否配对问题
- 使用链栈判断输入的表达式中的括号是否配对
- 验证花括号是否正确出现的c程序源代码
- 实现一种算法,打印n对括号的全部有效组合(即左右括号正确配对)
- 判定一个算术表达式中的圆括号是否正确配对
- 算法:检查括号是否配对