您的位置:首页 > 其它

第六周项目3 括号的匹配

2015-11-02 17:00 302 查看
问题与代码

/*

*Copyright (c) 2015,烟台大学计算机与控制工程学院

*All rights reserved.

*文件名称:head.h,main.cpp,zdy.cpp,match.cpp

*作者:陈梦萍

*完成日期:2015年11月02日

*版本号:v1.0

*

*问题描述: 括号的匹配

*输入描述:输入表达式

*程序输出:匹配是否正确

*/


//head.h

#include <stdio.h>
#include <malloc.h>

typedef char ElemType;
typedef struct linknode
{
ElemType data;              //数据域
struct linknode *next;      //指针域
} LiStack;                      //链栈类型定义

void InitStack(LiStack *&s);  //初始化栈
void DestroyStack(LiStack *&s);  //销毁栈
int StackLength(LiStack *s);  //返回栈长度
bool StackEmpty(LiStack *s);  //判断栈是否为空
void Push(LiStack *&s,ElemType e);  //入栈
bool Pop(LiStack *&s,ElemType &e);  //出栈
bool GetTop(LiStack *s,ElemType &e);  //取栈顶元素
void DispStack(LiStack *s);  //输出栈中元素
bool isMatch(char *st);


//main.cpp

#include"head.h"

int main()
{

char st[50];
printf("请输入表达式:");
scanf("%s", st);
if(isMatch(st))
printf("配对正确!!\n");
else
printf("配对错误!!\n");
return 0;
}


//zdy.cpp

 

#include"head.h"

void InitStack(LiStack *&s)
{
s=(LiStack *)malloc(sizeof(LiStack));
s->next=NULL;
}

void DestroyStack(LiStack *&s)
{
LiStack *p=s->next;
while (p!=NULL)
{
free(s);
s=p;
p=p->next;
}
free(s);
}

int StackLength(LiStack *s)
{
int i=0;
LiStack *p;
p=s->next;
while (p!=NULL)
{
i++;
p=p->next;
}
return(i);
}

bool StackEmpty(LiStack *s)
{
return(s->next==NULL);
}

void Push(LiStack *&s,ElemType e)
{
LiStack *p;
p=(LiStack *)malloc(sizeof(LiStack));
p->data=e;
p->next=s->next;
s->next=p;
}

bool Pop(LiStack *&s,ElemType &e)
{
LiStack *p;
if (s->next==NULL)
return false;
p=s->next;
e=p->data;
s->next=p->next;
free(p);
return true;
}

bool GetTop(LiStack *s,ElemType &e)
{
if (s->next==NULL)
return false;
e=s->next->data;
return true;
}

void DispStack(LiStack *s)
{
LiStack *p=s->next;
while (p!=NULL)
{
printf("%c ",p->data);
p=p->next;
}
printf("\n");
}


//match.cpp

#include"head.h"

bool isMatch(char *st)
{
int d=1, i;
char c;
LiStack *s;
InitStack(s);
for(i=0; st[i]!='\0'&&d; i++)
{
switch(st[i])
{
case'(':
case'[':
case'{':
Push(s, st[i]);
break;
case')':
Pop(s, c);
if(c!='(') d=0;
break;
case']':
Pop(s, c);
if(c!='[') d=0;
break;
case'}':
Pop(s,c);
if(c!='{') d=0;
break;
}
}
if(StackEmpty(s)&&d==1)
return true;
else
return false;
}


运行结果



 



 

知识点总结

            使用链栈,进行了关于括号的匹配的实践。

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: