数据结构:括号匹配问题。

假设一个算术表达式中允许包含两种括号:()[] 其嵌套的次序随意,请设计一个算法判断一个算术表达式中的括号是否匹配

include "seqstack1.h"

include "stdio.h"

void BracketMatch(char str);

void BracketMatch(char str) /*str[]中为输入的字符串,利用堆栈技术来检查该字符串中的括号是否匹配

{ SeqStack S; 

int i; char ch;

InitStack(&S);

for(i=0; str[i]!='\0'; i++)   /*对字符串中的字符逐一扫描*/ { switch(str[i])

{case '(':case '[':case '{': Push(&S,str[i]);  break;case ')': case ']':

case '}' if(IsEmpty(&S))

{ printf("\n右括号多余!");  

return;else{

GetTop(&S,&ch);

if(Match(ch,str[i]))  /用Match判断两个括号是否匹配/

Pop(&S,&ch);      /已匹配的左括号出栈/else

{ printf("\n对应的左右括号不同类);  

retur }/switch/}/for/

if(IsEmpty(&S))printf("\n括号匹配!");

elsprintf("\n左括号多余!");}

void main(){ char str[100];

printf("please input:");

gets(str);

BracketMatch(str);}

这是对所输入的字符串进行括号匹配,所有的括号都包括。

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-11-25
//用栈做的
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct _stack
{
char *base;
char *top;
int num;
}Sqstack;

void InitStack(Sqstack &s)
{
s.base=(char *)malloc(100*sizeof(char));
if(s.base==NULL)
{
printf("栈创建失败!\n");
return;
}
s.top=s.base;
*s.top=0;
s.num=100;
}
void push(Sqstack &s,char k)
{
if((s.top-s.base)>=s.num)
{
printf("栈已满!\n");
return;
}
*s.top++=k;
}

void pop(Sqstack &s)
{
if(s.base==s.top)
{
printf("该栈是空栈!\n");
return;
}
s.top--;
}

bool Isempty(Sqstack &s)
{
if(s.base==s.top)
return true;
return false;
}

bool Match(Sqstack &s)
{
char str[100];
int i;
printf("请输入括号串:");
scanf("%s",str);
for(i=0;i<strlen(str);i++)
{
switch(str[i])
{
case '[':
push(s,'[');
break;
case ']':
if(*(s.top-1)=='[')
pop(s);
else
return false;
break;
case '(':
push(s,'(');
break;
case ')':
if(*(s.top-1)=='(')
pop(s);
else
return false;
break;
}
}
if(Isempty(s))
return true;
return false;
}

int main()
{
Sqstack s;
InitStack(s);
if(Match(s))
printf("输入的括号匹配!\n");
else
printf("输入的括号不匹配!\n");
free(s.base);
return 0;
}本回答被提问者采纳
第2个回答  2012-04-25
就是堆栈么?追问

是的 我不会用程序实现啊

追答

我也不会啊,但是 网上一定有很多现成的。

相似回答