【求助】数据结构 括号匹配问题 代码如下 就是运行时运行不出来

[复制链接]
查看11 | 回复2 | 2021-1-27 05:15:50 | 显示全部楼层 |阅读模式
//栈的头文件
#pragmaonce
#include
usingnamespacestd;
typedefcharDataType;
typedefstructnode
{
DataTypedata;
structnode*next;
}LStackNode,*LinkStack;
voidInitStack(LinkStack*top)
{
(*top)=NULL;
}
intStackEmpty(constLinkStacktop)
{
if(top->next==NULL)
return-1;
else
return0;
}
intPushStack(LinkStack&top,DataTypee)
{
LStackNode*p=newLStackNode;
if(!p)
exit(1);
p->data=e;
p->next=top->next;
top->next=p;
return1;
}
intPopStack(LinkStack&top,DataType*e)
{
LStackNode*p=newLStackNode;
if(!p)
exit(1);
p=top->next;
if(!p)
{
coutnext=p->next;
*e=p->data;
deletep;
return1;
}
voidGetTop(constLinkStacktop,DataType*e)
{
LStackNode*p=newLStackNode;
if(!p)
exit(1);
p=top->next;
if(!p)
{
coutdata;
}
intStackLength(constLinkStacktop)
{
intcount=0;
LStackNode*p=newLStackNode;
if(!p)
exit(1);
p=top;
while(p->next)
{
p=p->next;
count++;
}
returncount;
}
voidDestoryStack(LinkStack&top)
{
LStackNode*p,*q;
p=top;
while(p)
{
q=p;
p=p->next;
deleteq;
}
}
//主函数
#include
#include"LinkStack.h"
intMatch(DataTypee,DataTypech);
intmain()
{
LinkStackS;
char*p;
DataTypee;
DataTypech[60];
InitStack(&S);
cout -->
回复

使用道具 举报

千问 | 2021-1-27 05:15:50 | 显示全部楼层
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VSIDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
回复

使用道具 举报

千问 | 2021-1-27 05:15:50 | 显示全部楼层
仅供参考:#include
#include
#include
#defineSTACK_INIT_SIZE10
#defineSTACK_GROW_SIZE5
#defineELEMTYPEchar
#defineOK1
#defineERROR0
typedefstruct{/*建立一个栈的首结点*/
ELEMTYPE*base;
ELEMTYPE*top;
intstacksize;
}SpStack;
intInitStack(SpStack*s){/*建立空的栈并返回首地址*/
s->base=((ELEMTYPE*)malloc(STACK_INIT_SIZE*sizeof(ELEMTYPE)));
if(!s->base)returnERROR;
s->top=s->base;
s->stacksize=STACK_INIT_SIZE;
returnOK;
}
intStackEmpty(SpStack*s){/*判断栈是否为空*/
if(s->top==s->base)returnOK;
elsereturnERROR;
}
intPush(SpStack*s,ELEMTYPEe){/*往栈顶插入元素即进栈*/
if(s->top-s->base>=s->stacksize){/*判断是否栈满*/
s->base=((ELEMTYPE*)realloc(s->base,(s->stacksize+STACK_GROW_SIZE)*sizeof(ELEMTYPE)));
if(!s->base)returnERROR;
s->stacksize+=STACK_GROW_SIZE;
s->top=s->base+s->stacksize;
}
*s->top++=e;
returnOK;
}
intPop(SpStack*s,ELEMTYPE*e){/*让栈顶元素依次输出即出栈*/
if(StackEmpty(s))returnERROR;
*e=*(--s->top);
returnOK;
}
intComp(ELEMTYPEa,ELEMTYPEb){
if((a=='('&&b!=')')
||(a=='['&&b!=']')
||(a=='{'&&b!='}')){
returnERROR;
}elsereturnOK;
}
intCount(SpStack*s){
ELEMTYPEe[STACK_INIT_SIZE*2];
ELEMTYPEe1;
inti;
InitStack(s);
fgets(e,STACK_INIT_SIZE*2,stdin);
if('\n'==e[strlen(e)-1])e[strlen(e)-1]=0;
printf("%s\n",e);
for(i=0;e!='\0';i++){
switch(e){
case'(':
case'[':
case'{':
Push(s,e);
break;
case')':
case']':
case'}':
if(StackEmpty(s)){
printf("%*s↖右括号多余\n",i+1,"");
return(ERROR);
}elsePop(s,&e1);
if(!Comp(e1,e)){
printf("%*s↖左右匹配出错\n",i+1,"");
return(ERROR);
}
}
}
if(!StackEmpty(s)){
printf("%*s↖左括号多余\n",i,"");
return(ERROR);
}else{
printf("匹配正确\n");
return(OK);
}
}
voidmain(){
SpStacks;
Count(&s);
free(s.base);
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行