括号匹配
下面是我写的程序:你自己作个参考 :#include《stdio.h》#include《iostream.h》#include《stdlib.h》#include《malloc.h》typedef char ElemType;typedef struct stack{ ElemType data; struct stack *top;}LinkStack;int InitStack(LinkStack *&ls){ ls=NULL; return 1;}int ClearStack(LinkStack *&ls){ LinkStack *p; if(ls==NULL) return 0; while(ls!=NULL) { p=ls; ls=p-》top; free(p); } return 1;}int StackEmpty(LinkStack *ls){ if(ls==NULL) return 1; else return 0;}int StackLength(LinkStack *ls){ int i=0; LinkStack *p=ls; while(p!=NULL) { p=p-》top; i++; } return i;}ElemType GetTop(LinkStack *ls){ ElemType e; if(ls==NULL) return 0; e=ls-》data; return e;}int Push(LinkStack *&ls,ElemType e){ LinkStack *p; p=new struct stack[sizeof(LinkStack)]; p-》data=e; p-》top=ls; ls=p; return 1;}int Pop(LinkStack *&ls,ElemType &e){ LinkStack *p; if(ls==NULL) return 0; else { p=ls; e=p-》data; ls=p-》top; free(p); } return 1;}//8. 访问栈中元素void StackPrint(LinkStack *ls){ LinkStack *p=ls; if(ls==NULL) return ; while(p!=NULL) { cout《《p-》data《《“ “; p=p-》top; }}//9. 写一算法,利用栈操作判断一字符串是否是回文。int huiwen(ElemType str){ int i=0; ElemType ch,temp; LinkStack *ls; InitStack(ls); while((ch=str[i++])!=’\0’) Push(ls,ch); i=0; while(!StackEmpty(ls)) { Pop(ls,temp); if(temp!=str[i++]) return 0; } return 1;}//10. 利用栈的基本信息,编写一个算法输入若干整数,以0标识输入结束。然后按与输入相反的次序输出这些数。int Reverse(){ ElemType ch; LinkStack *ls; InitStack(ls); cout《《“请输入你要输入的整数:“; cin》》ch; while(ch!=48) { Push(ls,ch); cin》》ch; } while(!StackEmpty(ls)) { Pop(ls,ch); cout《《ch《《“ “; } return 1;}//12. 利用栈进行括号匹配检验。int Match(char str){ int i=0; LinkStack *ls; InitStack(ls); ElemType ch,e; while(str[i]!=’\0’) { if(str[i]==’(’||str[i]==’[’) { Push(ls,str[i]); ch=GetTop(ls); } else if(ch==’(’&&str[i]==’)’) else if(ch==’[’&&str[i]==’]’) else return 0; i++; } if(StackEmpty(ls)) return 1; else return 0;}void main(){cout《《endl《《“括号匹配:“《《endl; ElemType str2=“[[()()]]()()(())“; cout《《Match(str2);}
c语言的括号匹配问题
#include 《stdio.h》
#include 《stdlib.h》
int main()
{
int i,count;
char ch,ch1;
while(gets(ch)!=NULL)
{
count=-1;
for(i=0;ch[i]!=’\0’;i++)
{
if(ch[i]==’(’||ch[i]==’[’||ch[i]==’《’||ch[i]==’{’)
{
ch1[++count]=ch[i];
}
else
{
if(ch[i]-ch1[count]《3)
{
count--;
}
else
{
break;
}
}
}
if(count==-1)
printf(“YES\n“);
else
printf(“NO\n“);
}
return 0;
}
括号匹配问题
#include《stdio.h》#define MAX 100int match(char *str){ char stack[MAX],*p=stack; while(*str) { switch(*str) { case ’(’: { *p++=*str; break; } case ’)’: { if(*--p!=’(’) return 0; break; } case ’[’: { *p++=*str; break; } case ’]’: { if(*--p!=’[’) return 0; break; } case ’{’: { *p++=*str; break; } case ’}’: { if(*--p!=’{’) return 0; break; } } str++; } if(stack==p) return 1; else return 0;}int main(){ char str[MAX]; gets(str); if(match(str)) { printf(“match\n“); } else { printf(“not match\n“); } return 0;}