#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; }