c++括号匹配检验利用栈编写满足下列要求的括号匹配检验程序:假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随
来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/11/14 00:07:27
c++括号匹配检验
利用栈编写满足下列要求的括号匹配检验程序:假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,即([]())或[([][])]等为正确的格式,[(]或([())或(()])均为不正确的格式.输入一个包含上述括号的表达式,检验括号是否配对.
利用栈编写满足下列要求的括号匹配检验程序:假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,即([]())或[([][])]等为正确的格式,[(]或([())或(()])均为不正确的格式.输入一个包含上述括号的表达式,检验括号是否配对.
这是以前做的科学计算的栈以及功能函数,支持小数、多位数、加减乘除、括号运算,会自动判断表达式正误,希望对你有所帮助,当然也包括了括号匹配功能.其实括号匹配功能关键就在于左右大括号小括号的位置以及数量判断.根据实例分析一下很快就能写好算法.
//在In(c)里判断括号是否匹配
//栈及其功能声明部分
//SqStack_theta 为运算符栈
//SqStack_value 为数据栈
//_theta 为运算符栈功能函数标识
//_value 为数据栈功能函数标识
#define STACK_INIT_SIZE 100
#define STACKINCERMENT 5
#define ERROR 0
#define OK 1
#define OVERFLOW -2
#include"stdio.h"
#include"malloc.h"
#include"stdlib.h"
typedef char SElemTypeOPTR;
typedef double SElemTypeOPND;
typedef int Status;
typedef struct
{
\x09SElemTypeOPTR *base;
\x09SElemTypeOPTR *top;
\x09int stacksize;
}SqStack_theta;
Status InitStack_theta(SqStack_theta &s)
{
\x09s.base=(SElemTypeOPTR*)malloc(STACK_INIT_SIZE*sizeof(SElemTypeOPTR));
\x09if(!s.base)exit(OVERFLOW);
\x09s.top=s.base;
\x09s.stacksize=STACK_INIT_SIZE;
\x09return OK;
}
Status Push_theta(SqStack_theta &s,SElemTypeOPTR e)
{
\x09if(s.top-s.base>=s.stacksize)
\x09{
\x09\x09s.base=(SElemTypeOPTR*)realloc(s.base,(s.stacksize+STACKINCERMENT)*sizeof(SElemTypeOPTR));
\x09\x09if(!s.base)exit(OVERFLOW);
\x09\x09s.top=s.base+s.stacksize;
\x09\x09s.stacksize+=STACKINCERMENT;
\x09};
\x09*s.top++=e;
\x09return OK;
}
Status Pop_theta(SqStack_theta &s,SElemTypeOPTR &e)
{
\x09if(s.top==s.base) return OVERFLOW;
\x09e=*--s.top;
\x09return OK;
}
Status SEmpty_theta(SqStack_theta &s)
{
\x09if(s.base==s.top)return OK;
\x09else return ERROR;
}
Status GetTop_theta(SqStack_theta &s)
{
\x09if(s.top==s.base) return OVERFLOW;
\x09return *(s.top-1);
}
//
// OPND stack
//
typedef struct
{
\x09SElemTypeOPND *base;
\x09SElemTypeOPND *top;
\x09int stacksize;
}SqStack_value;
Status InitStack_value(SqStack_value &s)
{
\x09s.base=(SElemTypeOPND*)malloc(STACK_INIT_SIZE*sizeof(SElemTypeOPND));
\x09if(!s.base)exit(OVERFLOW);
\x09s.top=s.base;
\x09s.stacksize=STACK_INIT_SIZE;
\x09return OK;
}
Status Push_value(SqStack_value &s,SElemTypeOPND e)
{
\x09if(s.top-s.base>=s.stacksize)
\x09{
\x09\x09s.base=(SElemTypeOPND*)realloc(s.base,(s.stacksize+STACKINCERMENT)*sizeof(SElemTypeOPND));
\x09\x09if(!s.base)exit(OVERFLOW);
\x09\x09s.top=s.base+s.stacksize;
\x09\x09s.stacksize+=STACKINCERMENT;
\x09};
\x09*s.top++=e;
\x09return OK;
}
Status Pop_value(SqStack_value &s,SElemTypeOPND &e)
{
\x09if(s.top==s.base) return OVERFLOW;
\x09e=*--s.top;
\x09return OK;
}
SElemTypeOPND GetTop_value(SqStack_value &s)
{
\x09if(s.top==s.base) return OVERFLOW;
\x09return *(s.top-1);
}
//判断优先级 返回int型
//1 >
//0 =
//-1
//在In(c)里判断括号是否匹配
//栈及其功能声明部分
//SqStack_theta 为运算符栈
//SqStack_value 为数据栈
//_theta 为运算符栈功能函数标识
//_value 为数据栈功能函数标识
#define STACK_INIT_SIZE 100
#define STACKINCERMENT 5
#define ERROR 0
#define OK 1
#define OVERFLOW -2
#include"stdio.h"
#include"malloc.h"
#include"stdlib.h"
typedef char SElemTypeOPTR;
typedef double SElemTypeOPND;
typedef int Status;
typedef struct
{
\x09SElemTypeOPTR *base;
\x09SElemTypeOPTR *top;
\x09int stacksize;
}SqStack_theta;
Status InitStack_theta(SqStack_theta &s)
{
\x09s.base=(SElemTypeOPTR*)malloc(STACK_INIT_SIZE*sizeof(SElemTypeOPTR));
\x09if(!s.base)exit(OVERFLOW);
\x09s.top=s.base;
\x09s.stacksize=STACK_INIT_SIZE;
\x09return OK;
}
Status Push_theta(SqStack_theta &s,SElemTypeOPTR e)
{
\x09if(s.top-s.base>=s.stacksize)
\x09{
\x09\x09s.base=(SElemTypeOPTR*)realloc(s.base,(s.stacksize+STACKINCERMENT)*sizeof(SElemTypeOPTR));
\x09\x09if(!s.base)exit(OVERFLOW);
\x09\x09s.top=s.base+s.stacksize;
\x09\x09s.stacksize+=STACKINCERMENT;
\x09};
\x09*s.top++=e;
\x09return OK;
}
Status Pop_theta(SqStack_theta &s,SElemTypeOPTR &e)
{
\x09if(s.top==s.base) return OVERFLOW;
\x09e=*--s.top;
\x09return OK;
}
Status SEmpty_theta(SqStack_theta &s)
{
\x09if(s.base==s.top)return OK;
\x09else return ERROR;
}
Status GetTop_theta(SqStack_theta &s)
{
\x09if(s.top==s.base) return OVERFLOW;
\x09return *(s.top-1);
}
//
// OPND stack
//
typedef struct
{
\x09SElemTypeOPND *base;
\x09SElemTypeOPND *top;
\x09int stacksize;
}SqStack_value;
Status InitStack_value(SqStack_value &s)
{
\x09s.base=(SElemTypeOPND*)malloc(STACK_INIT_SIZE*sizeof(SElemTypeOPND));
\x09if(!s.base)exit(OVERFLOW);
\x09s.top=s.base;
\x09s.stacksize=STACK_INIT_SIZE;
\x09return OK;
}
Status Push_value(SqStack_value &s,SElemTypeOPND e)
{
\x09if(s.top-s.base>=s.stacksize)
\x09{
\x09\x09s.base=(SElemTypeOPND*)realloc(s.base,(s.stacksize+STACKINCERMENT)*sizeof(SElemTypeOPND));
\x09\x09if(!s.base)exit(OVERFLOW);
\x09\x09s.top=s.base+s.stacksize;
\x09\x09s.stacksize+=STACKINCERMENT;
\x09};
\x09*s.top++=e;
\x09return OK;
}
Status Pop_value(SqStack_value &s,SElemTypeOPND &e)
{
\x09if(s.top==s.base) return OVERFLOW;
\x09e=*--s.top;
\x09return OK;
}
SElemTypeOPND GetTop_value(SqStack_value &s)
{
\x09if(s.top==s.base) return OVERFLOW;
\x09return *(s.top-1);
}
//判断优先级 返回int型
//1 >
//0 =
//-1
c++括号匹配检验利用栈编写满足下列要求的括号匹配检验程序:假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随
表达式括号匹配问题一个表达式中包括变量、常量、操作符、圆括号,圆括号可以嵌套,编写程序判断表达式中的括号是否正确匹配.输
简单的语法分析编写一个语法分析程序,能够查找C语言源程序中的基本语法错误,如圆括号、方括号、花括号的不匹配;如单引号和双
检验括号匹配的算法
检验括号匹配,用到栈的知识
C语言:表达式括号匹配检验(压栈,出栈)
利用栈实现括号的匹配
用C++语言栈的形式求n!的阶乘以及用栈完成括号匹配检验程序
数据结构(C) 请用类C语言实现括号匹配的检验这个算法
正则表达式匹配括号当中的数字
输入一行表达式,判断该表达式中的括号是否匹配.括号要求符合C++表达式的要求.若左括号与右括号匹配,则
用栈检测括号匹配出现()[] {}三种括号,嵌套时不允许出现交叉,且只能大括号嵌套中括号,中括号嵌套小括号,求代码~中括