您的位置:首页 > 理论基础 > 数据结构算法

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

2011-07-08 12:10 621 查看
#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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐