您的位置:首页 > 其它

第三章:顺序栈及其应用之二---括号匹配

2015-01-05 13:00 316 查看
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
#define MAXSIZE 100
int flag=1;
typedef struct LNode
{
char *top;
char *base;
int lenth;
}LNode,*LinkList;
LinkList Oper;
void Creat(LinkList &L)
{
L=new LNode;
L->top=new char[MAXSIZE];
L->base=L->top;
L->lenth=MAXSIZE;
printf("链表初始化完毕!\n");
}
int Push(LinkList &L,char c)
{
//入栈;
if(L->top - L->base == MAXSIZE) {printf("栈已满!\n");return 0;}
*L->top=c;
L->top++;
}
char Get(LinkList L)
{
return *(L->top-1);
}
int Pop(LinkList &L,char &c)
{
//出栈
if(L->top == L->base) {printf("栈已空!\n");return 0;}
L->top--;
c=*L->top;
return 1;
}
int StackEmpty(LinkList L)
{
if(L->top-L->base==1) return 1;
else return 0;
}
void Match()
{
flag=1;
printf("这是一个判断括号是否匹配的程序!\n请输入一串括号:(以#号结束)\n");
char c,b;cin>>c;Push(Oper,'#');
while(c!='#' || Get(Oper)!='#' && flag)
{
if(c=='(' || c=='[') {Push(Oper,c);cin>>c;}
else if(c==')')
{
if('('==Get(Oper)) {Pop(Oper,b);cin>>c;}
else{flag=0; break;}
}
else if(c==']')
{
if('['==Get(Oper)){Pop(Oper,b);cin>>c;}
else {flag=0;break;}
}
}
if(flag && StackEmpty(Oper)) printf("匹配成功!\n");
else printf("不成功!\n");
}
int main()
{

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