回文序列的判断

内容:

回文是只正读和返读都相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符向量是否为回文。

步骤:

算法分析:

回文序列是正读和反读都相同的序列,就是比较一个序列和它的逆序列,而栈刚好具有先进后出,正序输入逆序输出的特点,因此我们可以利用栈来解决这个问题。

我们使用一个数组栈,把要进行判断的字符串进行取半入栈的操作,对其再进行出栈,这样输出的前半段序列是逆序的,只需要将其与剩余的未入栈的字符串序列进行比较,如果一一对应,则是回文序列。

代码如下:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct Stack                                //定义数组栈
{
    int top;
    char str[100];
}STACK;
int main()
{
    int len,i,mid,next;
    char str[100];
    STACK s;
    s.top=0; 
    gets(str);                               //输入字符串 
    len=strlen(str);                           //求字符串的长度 
    mid=len/2;                              //取字符串中间位置 
    for(i=0;i<mid;i++)                         //一半字符串入栈 
    {
        s.str[s.top]=str[i];
        s.top++;
    }
    if(len%2!=0)     //字符串长度为奇数时,后半段字符串从中间位置+1开始 
    {
        next=mid+1;
    }else           //否则,后半段字符串从中间位置开始 
	{
        next=mid;
    }
    while(s.top!=0)
    {
        if(s.str[s.top-1]==str[next])//前半段的最后一个字符与后半段的第一个字符相等,继续比较 
        {
            s.top--;
            next++;
        }
        else
        {
            break;
        }
    }
    if(s.top==0)
    {
        printf("是回文\n");
    }
    else
    {
        printf("不是回文\n");
    }
    return 0;
}

运行结果:

 

猜你喜欢

转载自blog.csdn.net/weixin_54474126/article/details/121784583