bool Symmetyr(ElemType str[])
{
int i;
ElemType e;
SqStack *st;
for(i = 0;str[i] != '\0';i ++)
Push(st,str[i]);
for(i = 0;str[i] != '\0';i ++)
{
Pop(st,e);
if(str[i] != e)
{
DestoryStack(st);
return false;
}
}
DestoryStack(st);
return true;
}
bool Pop1(SqStack *&s,ElemType &e)
{
if(s -> top == -1)
return false;
e = s -> data[s -> top];
s -> top --;
return true;
}
bool Push1(SqStack *&s,ElemType &e)
{
if(s -> top == MaxSize - 1)
return false;
s -> top ++;
s -> data[s -> top] = e;
return true;
}
void Push(LinkStNode *&s,ElemType e)
{
LinkStNode *p;
p = (LinkStNode*)malloc(sizeof(LinkStNode));
p -> data = e;
p -> next = s -> next;
s -> next = p;
}
bool Pop(LinkStNode *&s,ElemType &e)
{
LinkStNode *p;
if(s -> next == NULL)
return false;
p = s -> next;
e = p -> data;
s -> next = p -> next;
free(p);
return true;
}
bool Match(char exp[],int n)
{
int i = 0;char e;
LinkStNode *st;
bool match = true;
InitStack(st);
while(i < n && match)
{
if(exp[i] == '(')
Push(st,exp[i]);
else if(exp[i] == ')')
{
Pop(st,e);
if(e != '(')
match = false;
else
Pop(st,e);
}
else
match = false;
i ++;
}
if(!StackEmpty)
match = false;
DestoryStack(st);
return match;
}
bool enQueue(SqQueue *&q,ElemType e)
{
if(q -> rear == MaxSize - 1)
return false;
q -> rear ++;
q -> data[q -> rear] = e;
return true;
}
bool deQueue(SqQueue *&q,ElemType &e)
{
if(q -> front == -1)
return false;
q -> front ++;
e = q -> data[q -> front];
return true;
}
bool enQueue1(SqQueue *& q,ElemType e)
{
if((q -> rear + 1) %MaxSize == q -> front)
return false;
q -> rear = (q -> rear + 1) %MaxSize;
q -> data[q -> rear] = e;
return true;
}
bool deQueue1(SqQueue * &q,ElemType &e)
{
if(q -> front == q -> rear)
return false;
q -> front = (q -> front + 1)%MaxSize;
e = q -> data[q -> front];
return true;
}
void enQueue2(LinkQueue *&q,ElemType e)
{
LinkQueue *p;
p = (LinkQueue*) malloc(sizeof(LinkQueue));
p -> data = e;
p -> next = NULL;
if(q -> rear = NULL)
q -> front = q -> rear = p;
q -> rear -> next = p;
q -> next = p;
}
bool deQueue2(LinkQueue *&q,ElemType &e)
{
LinkQueue *p;
if(q -> rear == NULL)
return false;
p = q -> front;
if(q -> rear == q -> front )
q -> front = q -> rear = NULL;
else
q -> front = q -> front -> next;
e = p -> data;
free(p);
return ture;
}
bool Match1(char exp[],int n)
{
int i = 0;
ElemType e;
LinkStNode *st;
InitStack(st);
bool flag = true;
while(i < n && flag)
{
if(exp[i] = '(' || exp[i] = '{' || exp[i] = '[')
Push(st,exp[i]);
if(exp[i] = ')')
{
if(GetTop(st,e))
{
if(e != '(')
flag = false;
else
Pop(st,e);
}
else
flag = false;
}
if(exp[i] = '{')
{
if(GetTop(st,e))
{
if(e != '}')
flag = false;
else
Pop(st,e);
}
else
flag = false;
}
if(exp[i] = '[')
{
if(GetTop(st,e))
{
if(e !=']')
flag = false;
else
Pop(st,e);
}
else
flag = false;
}
i ++;
}
if(!StackEmpty)
flag = false;
DestoryStack(st);
return flag;
}