版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39984761/article/details/78426976
用栈实现形如a+b&b+a@的中心对称字符的检验
将&前字符依次入栈与@前字符进行比较即可,下面是方法
Status match(char *a){ //match方法
SqStack s;
char c;
char *p=a;
InitStack(s);
while(*p!='&'){ //当字符不为'&'时,执行入栈操作
Push(s,*p);
p++;
}
p++;
while(*p!='@'){ /*当字符不为'@'时,依次取栈顶元素与指针所对字符比较。
若不一致,返回FALSE */
Pop(s,c);
if(c!=*p)
return FALSE;
p++;
}
if(StackEmpty(s)) //若空栈返回TURE
return TURE;
else
return FALSE;
}
执行该方法,返回真则中心对称,否则不是。下面贴一下用到的基本操作:
Status InitStack(SqStack &s){
s.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!s.base)exit(OVERFLOW);
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return OK;
}
Status GetTop(SqStack s,SElemType &e){
if(s.top=s.base)
return ERROR;
e=*(s.top-1);
return OK;
}
Status Push(SqStack &s,SElemType e){
if(s.top-s.base>=s.stacksize){
s.base=(SElemType *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!s.base)exit(OVERFLOW);
s.top=s.base+s.stacksize;
s.stacksize+=STACKINCREMENT;
}
*s.top++ =e;
return OK;
}
Status Pop(SqStack &s,SElemType &e){
if(s.top==s.base)return ERROR;
e=*--s.top;
return OK;
}
Status StackEmpty(SqStack &s){
if(s.top==s.base)return TURE;
else
return FALSE;
}