改之前的代码如下,后来删除了82和148行的cout,编译结果却没有变化,重开了dev c也仍然没法解决这个问题。
更改后结果仍然未变
而如果把代码复制重新重新编译能正确获得结果。
#include<iostream>
using namespace std;
typedef struct StackNode
{
char data;
struct StackNode *next;
}StackNode,*LinkStack;
typedef struct QNode
{
char data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
class check
{
private:
public:
LinkQueue Q;
LinkStack S;
int CreateStack(LinkStack &S);
int PushStack(LinkStack &S,char e);
int PopStack(LinkStack &S,char &e);
int GetStack(LinkStack &S,char &e);
int CreateQueue(LinkQueue &Q);
int EnterQueue(LinkQueue &Q,char e);
int DeleteQueue(LinkQueue &Q,char &e);
int checking(LinkQueue &Q,LinkStack &S);
};
int check::CreateStack(LinkStack &S)
{
S=new StackNode;
if(!S)
{
cout<<"error"<<endl;
return 0;
}
S=NULL;
return 1;
}
int check::PushStack(LinkStack &S,char e)
{
StackNode *q;
q=new StackNode;
q->data=e;
q->next=S;
S=q;
return 1;
}
int check::PopStack(LinkStack &S,char &e)
{
if(S==NULL)
return 0;
StackNode *p;
e=S->data;
p=S;
S=S->next;
delete p;
return 1;
}
int check::GetStack(LinkStack &S,char &e)
{
e=S->data;
return 1;
}
int check::CreateQueue(LinkQueue &Q)
{
Q.front=Q.rear=new QNode;
if(!Q.front)
return 0;
Q.front->next=NULL;
cout<<"请输入:(结束前请输入 / )"<<endl;
char e;
cin>>e;
while(e!='/')
{
EnterQueue(Q,e);
cin>>e;
cout<<e<<" ";
}
return 1;
}
int check::EnterQueue(LinkQueue &Q,char e)
{
QNode *p;
p=new QNode;
p->next=NULL;
p->data=e;
Q.rear->next=p;
Q.rear=Q.rear->next;
return 1;
}
int check::DeleteQueue(LinkQueue&Q,char &e)
{
QNode *p;
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p)
{
Q.rear=Q.front;
return 0;
}
delete p;
return 1;
}
int check::checking(LinkQueue &Q,LinkStack &S)
{
int i=1,t=0;
char e;
while(i!=0)
{
i=DeleteQueue(Q,e);
t++;
if(e=='('||e=='[')
{
PushStack(S,e);
}
else if(e==']')
{
char c;
PopStack(S,c);
if(c!='[')
{
cout<<"error: can't find [ , position:"<<t<<endl;
return 0;
}
}
else if(e==')')
{
char c;
PopStack(S,c);
if(c!='(')
{
cout<<"error: can't find ( , position"<<t<<endl;
return 0;
}
}
}
if(PopStack(S,e))
{
cout<<"error: can't find ] or ) to combo"<<endl;
return 0;
} /*这个if执行对每个左括号都需要右括号来配对的判断,原题目并不做此要求*/
cout<<i<<" ";
return 1;
}
int main()
{
class check C;
C.CreateStack(C.S);
C.CreateQueue(C.Q);
int k=0;
k=C.checking(C.Q,C.S);
if(k==1)
cout<<"error:0"<<endl;
return 0;
}