用栈实现表达式括号匹配检验,要求用户输入表达式?

feixiangshunjian 2008-04-07 06:24:30
用栈实现表达式括号匹配检验,要求用户输入表达式?
这个程序要这么写?特别是主函数部分?
...全文
819 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
feixiangshunjian 2008-05-25
还有没有其他的程序呢?
回复
realduke2000 2008-05-22
[Quote=引用 4 楼 onefours 的回复:]
遇到 ([{ : 进栈
遇到 ) : ( 出栈 不能就表明表达式不对
遇到 ] : [ 出栈 不能就表明表达式不对
遇到 } : { 出栈 不能就表明表达式不对

最后栈的size不为0也是错误
[/Quote]
这样的解法应该是正确的,但是你这样写我会以为你是用了3个栈。
你看遇到),(出栈,你怎么知道出栈的是(呢?
回复
onefours 2008-05-21
[Quote=引用 5 楼 realduke2000 的回复:]
说的太简单了(a+b)是正确的么?
[a+(b+c])是正确的么?(4L的能检查这种情况么?)
需求给的不清楚,有几种括号?可以叠加么?
(a+(b+c))??
[/Quote]
[a+(b+c])
[ :进栈
a+ :忽视
( : 进栈
b+c :忽视
] : 出栈得到 ( 失败!!应该是[才是正确的
回复
realduke2000 2008-05-21
说的太简单了(a+b)是正确的么?
[a+(b+c])是正确的么?(4L的能检查这种情况么?)
需求给的不清楚,有几种括号?可以叠加么?
(a+(b+c))??
回复
onefours 2008-05-20
遇到 ([{ : 进栈
遇到 ) : ( 出栈 不能就表明表达式不对
遇到 ] : [ 出栈 不能就表明表达式不对
遇到 } : { 出栈 不能就表明表达式不对

最后栈的size不为0也是错误





回复
feixiangshunjian 2008-05-19
2楼写的我看的不明白也,还有没有浅显易懂的?
回复
meiZiNick 2008-05-01
我也想知道,正在找這方面的資料~~~~~
回复
lzy340623339 2008-04-07
这个是我以前做过的,可以参考
#include "stdafx.h"
#include "iostream.h"
#include<stdlib.h>
#include "Stack.h"
#using <mscorlib.dll>
#include <tchar.h>

using namespace System;

status KuohaoPipei(char *c)
{
Stack S;
ElemType e=' ';
bool fal;
int i=0;
fal=1;
InitStack(S);
while(c[i]!='\0')
{

if(c[i]=='(' || c[i]=='[')
Push(S,c[i]);
else if(c[i]==')' || c[i]==']')
{
if(!EmptyStack(S))
{
fal=0;
break;
}
else
{
GetTop(S,e);
if(c[i]==')' && e=='(' || c[i]==']' && e=='[')
Pop(S,e);
else
{
fal=0;
break;
}
}

}
i++;

}
if(!EmptyStack(S))
fal=0;
if(fal)
cout<<"完全匹配!"<<endl;
else
cout<<"括号不匹配!"<<endl;
DestroyStack(S);
return OK;
}

int _tmain(int argc, _TCHAR* argv[])
{
char a[100];
cout<<"输入一串括号(10个),判断他们是否完全匹配:";
cin>>a;
KuohaoPipei(a);
return 0;
}



#define ERROR 0
#define OK 1
#define STACK_SIZE 100
#define STACKINCREMENT 10
typedef int status;
typedef char ElemType;
typedef struct Stack{
ElemType *top;
ElemType *base;
int Stacksize;
}Stack;

/*status InitStack(Stack &S);
status DestroyStack(Stack &S);
status ClearStack(Stack &S);
status EmptyStack(Stack S);
status GetTop(Stack S,ElemType &e);
status Push(Stack &S,ElemType e);
status Pop(Stack &S,ElemType &e);
int LengthStack(Stack S);*/
status InitStack(Stack &S)
{
S.base=new ElemType[STACK_SIZE];
if(!S.base) return ERROR;
S.top=S.base;
S.Stacksize=STACK_SIZE;
return OK;
}

status DestroyStack(Stack &S)
{
if(!S.base) return ERROR;
S.top=S.base;
S.Stacksize=0;
delete S.base;
return OK;
}

status ClearStack(Stack &S)
{
if(!S.base) return ERROR;
S.top=S.base;
S.Stacksize=0;
return OK;
}

status EmptyStack(Stack S)
{
if(!S.base) return ERROR;
if(S.Stacksize==0) return 0;
return S.Stacksize;
}

status GetTop(Stack S,ElemType &e)
{
if(!S.base) return ERROR;
e=*(S.top-sizeof(ElemType));
return OK;
}

status Push(Stack &S,ElemType e)
{
//ElemType *newbase;
if(S.top-S.base>=S.Stacksize)
{
S.base=(ElemType *)realloc(S.base,S.Stacksize+STACKINCREMENT*sizeof(ElemType));
if(!S.base) return ERROR;
S.top=S.base+S.Stacksize;
S.Stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}

status Pop(Stack &S,ElemType &e)
{
if(S.top==S.base) return ERROR;
e=*--S.top;
return OK;
}

int LengthStack(Stack S)
{
return S.top-S.base;
}
回复
相关推荐
发帖
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-04-07 06:24
社区公告
暂无公告