`
lovnet
  • 浏览: 6704383 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

括号配对算法

 
阅读更多
#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]==')')
  { Pop(ls,e);ch=GetTop(ls);}
  else if(ch=='['&&str[i]==']')
  { Pop(ls,e);ch=GetTop(ls);}
  else 
   return 0;
  i++;
 }
 if(StackEmpty(ls))
  return 1;
 else
  return 0;
}

void main(){
cout<<endl<<"括号匹配:"<<endl;
 ElemType str2[]="[[[]()()]]()([])(([]))";
 cout<<Match(str2);
}
     这是我编写的关于如何判断括号配对的程序,我觉得应该没什么问题,可总是不能出来结果,还请知道的人
  告诉小弟一声,或者大家还有什么别的方法现实,来分享一下吧!


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics