回文是指正读反读均相同的字符序列,如“abba“和“abdba“均是回文,但“good“不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈)

该博客介绍了一种利用栈来判断字符序列是否为回文的方法。代码中定义了一个`JudgeHuiWen`函数,首先初始化栈,然后将字符串的一半字符入栈。之后逐个比较栈顶元素与未入栈的对应字符,若不相等则返回0表示非回文,反之则返回1表示回文。完整程序还包括栈的相关操作函数如初始化、进栈、出栈和栈空判断。
该文章已生成可运行项目,
  1. 题目要求:回文是指正读反读均相同的字符序列,如"abba"和"abdba"均是回文,但"good"不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈)

  2. 判断回文的代码

    int JudgeHuiWen(char *str)
    {
    	SqStack s;
    	InitStack(&s);
    	int i; 
    	char temp;
    	int len=strlen(str);
    	for(i=0;i<len/2;i++)
    		Push(&s,str[i]);
    	if(len%2==1)i++;//当字符个数为奇数时跳过中间字符 
    	while(!StackEmpty(s))
    	{
    		temp=Pop(&s);
    		if(temp!=str[i]) return 0;
    		else i++;
    	}
    	return 1;
    }
    
  3. 完整程序

    #include<stdio.h> 
    #include <string.h>
    #define StackSize 10
    #define MAXSIZE 10
    typedef struct
    {
        char data[StackSize];
        int top; 
    }SqStack;
    //初始化栈 
    void InitStack(SqStack *S)
    { 
        S->top=-1;
    }
    //栈的判空 
    int StackEmpty(SqStack S)
    { 
        if (S.top==-1)
            return 1;
        else
            return 0;
    }
    //进栈 
    int Push(SqStack *S,char e)
    {
        if(S->top == StackSize -1)
        {
            return 0;
        }
        S->top++;
        S->data[S->top]=e;
        return 1;
    }
    //出栈 
    char Pop(SqStack *S)
    { 
        if(S->top==-1)
            return 0;
        char e=S->data[S->top];
        S->top--;
        return e;
    }
    int JudgeHuiWen(char *str)
    {
    	SqStack s;
    	InitStack(&s);
    	int i; 
    	char temp;
    	int len=strlen(str);
    	for(i=0;i<len/2;i++)
    		Push(&s,str[i]);
    	if(len%2==1)i++;//当字符个数为奇数时跳过中间字符 
    	while(!StackEmpty(s))
    	{
    		temp=Pop(&s);
    		if(temp!=str[i]) return 0;
    		else i++;
    	}
    	return 1;
    }
    int main()
    {
    	char str[MAXSIZE];
    	gets(str);
    	int judge=JudgeHuiWen(str);
    	if(judge==1)
    		printf("此字符序列是回文!");
    	else
    		printf("此字符序列不是回文!");
    } 
    
本文章已经生成可运行项目
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值