【c++括号匹配检验利用栈编写满足下列要求的括号匹配检验程序-查字典问答网
分类选择

来自彭晓晖的问题

  【c++括号匹配检验利用栈编写满足下列要求的括号匹配检验程序:假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,即([]())或[([][])]等为正确的格式,[(]或([())或(()])均为不正】

  c++括号匹配检验

  利用栈编写满足下列要求的括号匹配检验程序:假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,即([]())或[([][])]等为正确的格式,[(]或([())或(()])均为不正确的格式.输入一个包含上述括号的表达式,检验括号是否配对.

1回答
2020-04-16 22:53
我要回答
请先登录
金涛涛

  这是以前做的科学计算的栈以及功能函数,支持小数、多位数、加减乘除、括号运算,会自动判断表达式正误,希望对你有所帮助,当然也包括了括号匹配功能.其实括号匹配功能关键就在于左右大括号小括号的位置以及数量判断.根据实例分析一下很快就能写好算法.

  //在In(c)里判断括号是否匹配

  //栈及其功能声明部分

  //SqStack_theta为运算符栈

  //SqStack_value为数据栈

  //_theta为运算符栈功能函数标识

  //_value为数据栈功能函数标识

  #defineSTACK_INIT_SIZE100

  #defineSTACKINCERMENT5

  #defineERROR0

  #defineOK1

  #defineOVERFLOW-2

  #include"stdio.h"

  #include"malloc.h"

  #include"stdlib.h"

  typedefcharSElemTypeOPTR;

  typedefdoubleSElemTypeOPND;

  typedefintStatus;

  typedefstruct

  {

  x09SElemTypeOPTR*base;

  x09SElemTypeOPTR*top;

  x09intstacksize;

  }SqStack_theta;

  StatusInitStack_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;

  x09returnOK;

  }

  StatusPush_theta(SqStack_theta&s,SElemTypeOPTRe)

  {

  x09if(s.top-s.base>=s.stacksize)

  x09{

  x09x09s.base=(SElemTypeOPTR*)realloc(s.base,(s.stacksize+STACKINCERMENT)*sizeof(SElemTypeOPTR));

  x09x09if(!s.base)exit(OVERFLOW);

  x09x09s.top=s.base+s.stacksize;

  x09x09s.stacksize+=STACKINCERMENT;

  x09};

  x09*s.top++=e;

  x09returnOK;

  }

  StatusPop_theta(SqStack_theta&s,SElemTypeOPTR&e)

  {

  x09if(s.top==s.base)returnOVERFLOW;

  x09e=*--s.top;

  x09returnOK;

  }

  StatusSEmpty_theta(SqStack_theta&s)

  {

  x09if(s.base==s.top)returnOK;

  x09elsereturnERROR;

  }

  StatusGetTop_theta(SqStack_theta&s)

  {

  x09if(s.top==s.base)returnOVERFLOW;

  x09return*(s.top-1);

  }

  //

  //OPNDstack

  //

  typedefstruct

  {

  x09SElemTypeOPND*base;

  x09SElemTypeOPND*top;

  x09intstacksize;

  }SqStack_value;

  StatusInitStack_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;

  x09returnOK;

  }

  StatusPush_value(SqStack_value&s,SElemTypeOPNDe)

  {

  x09if(s.top-s.base>=s.stacksize)

  x09{

  x09x09s.base=(SElemTypeOPND*)realloc(s.base,(s.stacksize+STACKINCERMENT)*sizeof(SElemTypeOPND));

  x09x09if(!s.base)exit(OVERFLOW);

  x09x09s.top=s.base+s.stacksize;

  x09x09s.stacksize+=STACKINCERMENT;

  x09};

  x09*s.top++=e;

  x09returnOK;

  }

  StatusPop_value(SqStack_value&s,SElemTypeOPND&e)

  {

  x09if(s.top==s.base)returnOVERFLOW;

  x09e=*--s.top;

  x09returnOK;

  }

  SEl

2020-04-16 22:54:51

最新问答

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  •