
数据结构:括号匹配问题。
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);}
这是对所输入的字符串进行括号匹配,所有的括号都包括。
#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;
}
是的 我不会用程序实现啊
我也不会啊,但是 网上一定有很多现成的。