数据结构-使用栈进行括号匹配算法

#include<stdio.h>
#include<stdlib.h>

typedef char ElemType;
//栈的定义
typedef struct linknode
{
 ElemType data;
 struct linknode * next;
}LinkStack;
void InitStack(LinkStack * &s);//栈的初始化
void ClearStack(LinkStack * &s);//栈的销毁
int StackLength(LinkStack * s);//求栈的长度
int StackEmpty(LinkStack *s);//判断栈是否是空栈
void Push(LinkStack * &s,ElemType e);//进栈
int Pop(LinkStack * &s,ElemType &e);//出栈
int GetTop(LinkStack * s,ElemType &e);//取栈顶元素
void DisplayStack(LinkStack * s);//显示栈里面的元素
int Match(ElemType exp[],int n);//串括号的匹配

void main()
{
 ElemType c[5]={'(','a','+','b',')'};
 if(Match(c,5))
 {
  printf("该串括号是匹配的 \n");
 }
 else
 {
  printf("该串括号不是匹配的 \n");
 }
}

//栈的初始化
void InitStack(LinkStack * &s)
{
 s=(LinkStack *)malloc(sizeof(LinkStack));
 s->next=NULL;
}
//栈的销毁
void ClearStack(LinkStack * &s)
{
 LinkStack * p=s,*q=s->next;
 while(q!=NULL)
 {
  free(p);
  p=q;
  q=p->next;
 }
 free(p);
}
//求栈的长度
int StackLength(LinkStack * s)
{
 int n=0;
 LinkStack *p;
 p=s->next;
 while(p!=NULL)
 {
  n++;
  p=p->next;
 }
 return(n);
}
//判断栈是否是空栈
int StackEmpty(LinkStack * s)
{
 return(s->next==NULL);
}
//进栈(头插入法)
void Push(LinkStack * &s,ElemType e)
{
 LinkStack *p;
 p=(LinkStack *)malloc(sizeof(LinkStack));
 p->data=e;
 p->next=s->next;
 s->next=p;
}
//出栈
int Pop(LinkStack * &s,ElemType &e)
{
 LinkStack *p;
 if(s->next==NULL)
 {
  return 0;
 }
 p=s->next;
 e=p->data;
 s->next=p->next;
 free(p);
 return 1;
}
//取栈顶元素
int GetTop(LinkStack * s,ElemType &e)
{
 if(s->next==NULL)
 {
  return 0;
 }
 e=s->next->data;
 return 1;
}
//显示栈里面的元素
void DisplayStack(LinkStack * s)
{
 LinkStack *p=s->next;
 while(p!=NULL)
 {
  printf(" %c ",p->data);
  p=p->next;
 }
 printf("\n");
}
//判断括号是否配对
int Match(ElemType exp[],int n)
{
 int i=0;
 ElemType e;
 LinkStack * st;
 InitStack(st);
 while(i<n)
 {
  if(exp[i]=='(')
  {
   Push(st,exp[i]);
  }
  else if(exp[i]==')')
  {
   if(GetTop(st,e)==1)
   {
    if(e!='(')
    {
     return 0;
    }
    else
    {
     Pop(st,e);
    }
   }
   else
   {
    return 0;
   }
  }
  i++;
 }
 if(StackEmpty(st)==1)
 {
  return 1;
 }
 else
 {
  return 0;
 }
}

你可能感兴趣的:(数据结构,c,算法,qq,struct,null)