此代码可以正常运行,下附有运行界面,是是实实在在的类C语言
将字符串前一半入栈,然后,栈中元素和字符串后一半进行比较。即将第一个出栈元素和后一半串中第一个字符比较,若相等,则再出栈一个元素与后一个字符比较,……,直至栈空,结论为字符序列是回文。在出栈元素与串中字符比较不等时,结论字符序列不是回文。
#include <stdio.h>
#include <string.h>
#include<stdlib.h>
typedef char ElemType;
typedef struct
{
int stack_size;
ElemType *top;
ElemType *base;
}Stack;
enum Status{ERROR,OK};
InitStack(Stack &S,ElemType *t) //初始化栈
{
int len=strlen(t);
S.base = (ElemType *)malloc(len * sizeof(ElemType));
if (S.base == NULL)
return ERROR;
S.top = S.base;
S.stack_size = len;
}
//入栈
Status Push(Stack &S,ElemType e)
{
if(S.top-S.base==S.stack_size)
return ERROR;
*S.top++=e;
return OK;
}
//出栈
Status Pop(Stack &S,ElemType &e)
{
if(S.top==S.base)
return ERROR;
e=*--S.top;
return OK;
}
//判空
int StackEmpty(Stack S)
{
return (S.top==S.base);
}
Status IsPlalindrome(ElemType *t) //判断t[]是否为回文
{
Stack S;
ElemType e;
int i , len;
InitStack(S,t);
len=strlen(t); //求数组长度
for ( i=0; i<len/2; i++)//将一半字符入栈
Push(S, t[i]);
if(strlen(t)%2==1)
i++;
while( !StackEmpty(S))// 每弹出一个字符与相应字符比较
{
Pop (S,e);
if( e!=t[i])
return ERROR ;// 不等则返回0
else i++;
}
return OK ; // 比较完毕均相等
}
int main()
{
int len=0;
ElemType *a=NULL;
printf("你要输入几个字符:");
scanf("%d", &len);
getchar(); //吃掉回车
a = (ElemType *)malloc(len * sizeof(ElemType));
printf("\n请输入待检测的字符串:");
gets(a);
if (IsPlalindrome(a))
printf("\n是回文字符串!");
else
printf("\n不是回文字符串!");
return 0;
}
本文介绍了一种使用栈来判断字符序列是否为回文的方法。通过将字符串的一半入栈,然后依次比较栈顶元素与字符串后半部分的字符,相等则继续比较,直到栈空,若所有比较都成功则序列是回文;若有不等则不是回文。
350

被折叠的 条评论
为什么被折叠?



