利用链栈检验括号是否匹配

【问题描述】
一个表达式中包含两种括号,( ) [ ] ,且这两种括号可以按照任意次序嵌套使用。判别括号是否正确配对出现。
(1)扫描表达式,

(2)如果是左括号则入栈,继续扫描

(3)如果是右括号则 弹出栈顶括号 与当前右括号判断是否匹配;若匹配则继续扫描,否则返回匹配不正确,不再扫描;

(4)扫描完成后若栈为空则正确配对,否则不正确。

【样例输入1】 9+(7-3)*[9/(8-5)]#

【样例输出1】 ok

【样例输入2】 )9+(7-3)*[9/(8-5)]#

【样例输出2】 error

【样例说明】表达式内的数据项可都定义为字符型,表达式以#代表结束,

img


我的代码如下

#include
#include
#define OK 1
#define ERROR 0
using namespace std;
typedef struct Stacknode
{
    char data;
    struct Stacknode *next;
}Stacknode,*Linkstack;
int Initstack(Linkstack &s)
{
    s=NULL;
    return OK;
}
int push(Linkstack &s,char x)
{
    Linkstack p;
    p=(Stacknode*)malloc(sizeof(Stacknode));
    p->data=x;
    p->next=s;
    s=p;
    return OK;
}
int pop(Linkstack &s,char x)
{
    if(s==NULL)
        return ERROR;
    else if((x==')'&&s->data=='(')||(x==']'&&s->data=='['))
    {
        Linkstack p;
        p=(Stacknode*)malloc(sizeof(Stacknode));
        p=s;
        s=s->next;
        delete p;
        return OK;
    }    
    return 0;
}
int match(Linkstack s)
{
    char x;
    cin>>x;
    if(x=='#')
        cout<<"ok";
    else
    {
        while(x!='#') 
        {
            if(x=='('||x=='[')
                push(s,x);
            else if(x==')'||x==']')
                pop(s,x);
            cin>>x;
        }
        if(OK==pop(s,x))
            cout<<"ok";
        else
            cout<<"error"; 
    }
    return 0;    
}
int main()
{
    Linkstack s;
    Initstack(s);
    match(s);
    return 0;
}

提交的测试结果如下图所示

img


怎么改正?