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

来源:互联网 发布:wap淘宝流量真实吗 编辑:程序博客网 时间:2024/05/21 19:27
#include <stdio.h>#include <string.h>#include <iostream>using namespace std;#define MAXSIZE 100int 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;}

 

0 0