# include <stdio.h>
# include <stdlib.h>
# define MAXSIZE 10
# define DATATYPE int
typedef struct node{
DATATYPE data[MAXSIZE];
int top;
}SEQSTACK;
void init_stack(SEQSTACK *S)
{
S->top = -1;
}
void stack_push(SEQSTACK *S,DATATYPE n)
{
if(S->top==MAXSIZE-1){
printf("full stack!\n");
return;
}
S->data[++(S->top)] = n;
}
int isEmpty(SEQSTACK *S)
{
int isEmpty = S->top==-1?1:0;
return isEmpty;
}
DATATYPE pop_stack(SEQSTACK *S)
{
if(isEmpty(S))
{
printf("empty stack!\n");
return;
}
// 出栈先出栈顶
DATATYPE data = S->data[S->top];
S->top--;
return data;
}
int isSymmetric_stack(SEQSTACK *S)
{
// 利用栈的特性判断一个字符串是否是中心对称图形,如abba,abcba都是中心对称图形
int i = 0,len = (S->top+1),isSymmetric = 0;
SEQSTACK *p = (SEQSTACK*)malloc(sizeof(SEQSTACK));
init_stack(p);
for(i;i<len/2;i++){
stack_push(p,S->data[S->top]);
S->top--;
}
if(len%2==1){
S->top--;//为奇数时top指针要往下移动一格
}
while(pop_stack(p)==S->data[S->top]){
S->top--;
if(S->top==-1)
{
isSymmetric = 1;
break;
}
}
return isSymmetric;
}
void main()
{
SEQSTACK *s = (SEQSTACK*)malloc(sizeof(SEQSTACK));
init_stack(s);
stack_push(s,1);
stack_push(s,9);
stack_push(s,8);
stack_push(s,9);
stack_push(s,1);
printf("%d\n",isSymmetric_stack(s));
}
c语言:利用栈特性实现判断字符串是否中心对称
最新推荐文章于 2023-04-09 12:02:17 发布